调整 grep 命令以避免出现“多余”的行

调整 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 为空”的行

我尝试用管道传输它,|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)

相关内容