我想要计算单行(或所有行,因为通常只有一行)中匹配的数量。
我想要计算不仅是每行的一个匹配项,如下所示:
echo "123 123 123" | grep -c -E "123" # Result: 1
更好的例子:echo "1 1 2 2 2 5" | grep -c -E '([^ ])( \1){1}' # Result: 1, expected: 2 or 3
我想要计算单行(或所有行,因为通常只有一行)中匹配的数量。
我想要计算不仅是每行的一个匹配项,如下所示:
echo "123 123 123" | grep -c -E "123" # Result: 1
更好的例子:echo "1 1 2 2 2 5" | grep -c -E '([^ ])( \1){1}' # Result: 1, expected: 2 or 3
grep -o
, 然后将结果通过管道传送到 wc -l
:$ echo "123 123 123" | grep -o 123 | wc -l
3
-o
是什么 :( - manojldsegrep
吗?同样的事情也可以用egrep
完成。 - Mike Penningtonwc -l
命令,你就可以看到它们的输出。 - Simon Whitaker也许你应该先将空格转换为换行符:
$ echo "1 1 2 2 2 5" | tr ' ' $'\n' | grep -c 2
3
可能是下面这样:
echo "123 123 123" | sed "s/123 /123\n/g" | wc -l
(可能有点丑陋,但我的bash技能还不够好)
\n
。 - Tyiloawk '{print gsub(your_regex,"&")}'
在每行中打印匹配的次数,或者使用 awk '{c+=gsub(your_regex,"&")}END{print c}'
打印总匹配次数。请注意,相对速度可能因使用的 awk 实现和输入而异。gawk -v FPAT=your_regex '{print NF}'
或 gawk -v FPAT=your_regex '{c+=NF}END{print c}'
。 - jarno这个可能适合你:
sed -n -e ':a' -e 's/123//p' -e 'ta' file | sed -n '$='
GNU sed 可以这样编写:
sed -n ':;s/123//p;t' file | sed -n '$='