![调整 grep 命令以避免出现“多余”的行](https://linux22.com/image/1497280/%E8%B0%83%E6%95%B4%20grep%20%E5%91%BD%E4%BB%A4%E4%BB%A5%E9%81%BF%E5%85%8D%E5%87%BA%E7%8E%B0%E2%80%9C%E5%A4%9A%E4%BD%99%E2%80%9D%E7%9A%84%E8%A1%8C.png)
我需要在压缩文件中查找一些文本。我使用的是 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)