我正在尝试计算与给定模式匹配的文件中的行。现在的问题是它只给了我一些行数。如何获取文件位置或名称以及匹配行数?
我正在使用的命令是
for i in $(find . -name 'foo.txt' | sed 's/\.\///g');
do
grep -l && -c '^>' $i;
done
所以我期待的输出就像"文件位置/名称的行数匹配"
答案 0 :(得分:2)
grep
可以显示文件名。您可以使用xargs
为每批文件名调用grep。它将从标准输入中读取名称,并将它们用作grep的命令行参数。
find . | xargs grep -cH '^>'
使用find
命令:
find . -name 'foo.txt' | sed 's/\.\///g' | xargs grep -cH '^>'
答案 1 :(得分:0)
您捕获变量中匹配的行数并对其进行测试:
n=$(grep -c '^>' "$i")
(( n > 0 )) && echo "$i:$n"
实际上,你甚至不需要测试:如果找不到匹配项,grep退出失败,所以
n=$(grep -c '^>' "$i") && echo "$i:$n"
实际上,这太过分了。至少使用GNU grep,使用-H
选项。我带着一个文件的演示:
$ grep -c zero note.xml
16
$ grep -Hc zero note.xml
note.xml:16