Настройте команду grep, чтобы избежать "лишних" строк

Я должен найти текст внутри заархивированных файлов. Я использую Cygwin. Некоторые заархивированные файлы пусты. Очевидно, я вообще не хочу иметь "шумную" информацию об этих "пустых zip-файлах". Например

find . -iname '*.zip' -print -exec unzip -l {} \; |grep -i vbs

куда vbs это строка, которую я ищу.

Проблема в том, что он возвращает то, что я ищу, но он также возвращает много шума с такими строками:

C\ProgramData\ABC\DEF\VBScripts\OutputArchiveFiles.vbs
warning [/z/XYZ/Backup/123/456/Backup Set 1/Backup Files 1/Backup files 2.zip]:  zipfile is empty

Я не хочу видеть эти строки с "zipfile is empty"

Я пытался |grep -v 'zipfile is empty' но он все равно выводит эти строки.

Мой вопрос: как мне избежать печати этих "пустых" строк и видеть только те строки, которые я ищу; то есть vbs?

1 ответ

Решение

Эти дополнительные строки, вероятно, в stderr поток. Вы можете проверить, увидев, перенаправляют ли они в отдельный файл (например, command 2> error.txt )

В основном, запустите:

find . -iname '*.zip' -print -exec unzip -l {} \; 2> error.txt |grep -i vbs 

Если это решит вашу проблему, вы можете заменить error.txt с /dev/null (это может не работать на всех версиях Cygwin)

Другие вопросы по тегам