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

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

Мне нужно найти текст внутри zip-файлов. Я использую Cygwin. Некоторые zip-файлы пустые. Очевидно, я вообще не хочу иметь «шумную» информацию об этих «пустых 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

Я не хочу видеть эти строки с надписью «zip-файл пуст».

Я пробовал передать его по конвейеру, |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)

Связанный контент