Настройте команду 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)