我的几个子文件夹中有很多文件,其中包含一个字符串type="abc_
- 我不太确定有多少个变体- 所以我想知道我的文件中出现了abc_
多少次未知的情况。type="abc_
我希望得到类似包含行的东西
"type="abc_0815 found 50 times
"type="abc_0816 found 32 times
...
and so on.
如果我这样做的话:
grep -rni 'type="abc_' * | wc
我已经知道它出现了 14905 次type="abc_
。
有人可以帮我吗?
答案1
这用于find
获取文件列表,将其传递给cat
并解析输出awk
:
find . -type f |
xargs -I xx cat "xx" | awk '/type="abc_/{
for(i=1;i<=NF;i++){
if($i~/type="abc_/){ d[$i]++ } } }
END{ for(i in d){ print i"\tfound",d[i],"times." } }'
type="abc_4 found 1 times.
type="abc_3 found 2 times.
type="abc_6 found 1 times.
type="abc_2 found 2 times.
type="abc_10 found 3 times.
type="abc_5 found 1 times.
它使用 find 而不是简单的查找内容,cat *
以便更灵活地搜索内容。
xargs .. cat | ..
可以缩短为find . -type f -exec cat {} + | awk ..
答案2
只需添加-c
标志即可让 grep 为您计数。
如果 0 结果太多,可以使用 awk 过滤掉
grep -rnic 'type="abc_' * | awk -F: '$NF>0'
答案3
尝试类似这样:
grep -rni 'type="abc_' * |sed -n "s/.*\(abc_[0-9]*\).*/\1/p"|uniq -c| sed "s/\(.*\)\(abc.*\)/\2 found \1 times/"