如何解决使用sed或grep在一行中计算正则表达式模式匹配?
| 我想计算一行上(或所有行的匹配数,因为总会只有一行)。 我想不仅仅算每行一场比赛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
, 也许您应该先将空格转换为换行符:
$ 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 fu并不是很好)
, 为什么不使用awk?
你可以用awk \'{print gsub(your_regex,\"&\")}\'
在每行上打印匹配数,或者
awk \'{c+=gsub(your_regex,\"&\")}END{print c}\'
打印匹配总数。请注意,相对速度可能会有所不同,具体取决于使用哪种awk实现以及给出的输入。
, 这可能对您有用:
sed -n -e \':a\' -e \'s/123//p\' -e \'ta\' file | sed -n \'$=\'
GNU sed可以写成:
sed -n \':;s/123//p;t\' file | sed -n \'$=\'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。