31

我想计算一行上的匹配数(或所有行,因为总是只有一行)。

我想计算的不仅仅是每行一场比赛

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
4

5 回答 5

53

您可以使用grep -o然后通过管道wc -l

$ echo "123 123 123" | grep -o 123 | wc -l
3
于 2011-05-30T22:49:39.847 回答
1

也许在下面:

echo "123 123 123" | sed "s/123 /123\n/g" | wc -l

(也许丑陋,但我的 bash fu 不是那么好)

于 2011-05-30T22:46:47.443 回答
1

也许您应该首先将空格转换为换行符:

$ echo "1 1 2 2 2 5" | tr ' ' $'\n' | grep -c 2
3
于 2011-05-31T12:53:49.717 回答
0

为什么不使用awk?您可以使用awk '{print gsub(your_regex,"&")}' 打印每行的匹配数,或 awk '{c+=gsub(your_regex,"&")}END{print c}' 打印匹配的总数。请注意,相对速度可能会根据使用的 awk 实现以及给出的输入而有所不同。

于 2015-09-03T15:38:29.493 回答
0

这可能对您有用:

sed -n -e ':a' -e 's/123//p' -e 'ta' file | sed -n '$='

GNU sed 可以写成:

sed -n ':;s/123//p;t' file | sed -n '$='
于 2015-09-04T10:21:55.193 回答