我正在寻找一个命令/脚本,它可以在给定的 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
...