文件和匹配的行数

时间:2015-11-11 16:40:44

标签: bash shell

我正在尝试计算与给定模式匹配的文件中的行。现在的问题是它只给了我一些行数。如何获取文件位置或名称以及匹配行数?

我正在使用的

命令是

for i in $(find . -name 'foo.txt' | sed 's/\.\///g');
do
    grep -l && -c '^>' $i;
done

所以我期待的输出就像"文件位置/名称的行数匹配"

2 个答案:

答案 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