grep 查找 tar 下多个文件中的字符串并打印 wc -l

grep 查找 tar 下多个文件中的字符串并打印 wc -l

我正在寻找一个命令/脚本,它可以在给定的 tar.gz 文件下的多个文件中搜索给定的字符串,并给出该字符串的 wc -l 以及特定的文件名。

我尝试了以下但没有给我任何输出。

tar -zxf /home/myname/April/maillogs.tar.gz
for f in /home/myname/April/*; do
  grep -l "sent" $f |wc -l
done

答案1

正如评论中已经提到的,您可以通过单个zgrep命令来完成此操作:

zgrep -c "sent" /home/myname/April/*.tar.gz

来自grep手册:

-c,--计数

抑制正常输出;相反,打印每个输入文件的匹配行数。使用 -v, --invert-match 选项(见下文),计算不匹配的行数。 (-c 由 POSIX 指定。)

答案2

乌格勒普有选项-z -c

ugrep -z -c "sent" /home/myname/April/*.tar.gz

这通过列出 tar.gz 文件及其 {path/file} 部分来以逻辑方式报告 tar.gz“发送”匹配:

foo.tar.gz{path/file1.txt}:123
foo.tar.gz{path/file2.txt}:456
...
bar.tar.gz{path/file1.txt}:789
bar.tar.gz{path/file2.txt}:0
...

相关内容