我想计算以 'bar' 开头并以 'i' 或 'n' 结尾的 6 个字母单词的数量。
例如,给定此文件:
barxxi
barxxc
barxxn
barqwq
barovo
输出应为 2(整数),因为这些行匹配:
barxxi
barxxn
我的代码如下,但似乎是错误的:
grep -c 'bar??[ni]' /path/file.txt
答案1
使用grep -o
它仅输出匹配的文本,如有必要,每行多次输出。
grep -o '\<bar[^ ][^ ][ni]\>' /path/file.txt | wc -w
和\<
匹配\>
单词的开头和结尾。匹配[^ ]
非空格字符。
答案2
将问号替换?
为句点.
,只要您的输入每行只有一个单词,您的 grep 就应该可以工作。
grep -c 'bar..[ni]' /path/file.txt
答案3
awk '{ for (i=1;i<=NF;i++) if ($i ~ /^bar.*[in]/ || $i ~ /[[:space:]]bar.*[in]/) { count++ }} END { print count }' filename
上面的 awk 解决方案也应该有效。考虑到每行上的多个条目,如果模式与带有 ~ 的正则表达式匹配,则 awk 从每行文件中的第一个空格分隔条目查找到最后一个条目 (NF),并相应地增加计数。创建两个 if 语句来考虑行的开头 (^) 和条以及空格和条。最后,计数被打印到屏幕上。