使用 -grep 计算以 'bar' 开头并以 'i' 或 'n' 结尾的 6 个字母单词的数量

使用 -grep 计算以 'bar' 开头并以 'i' 或 'n' 结尾的 6 个字母单词的数量

我想计算以 '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 语句来考虑行的开头 (^) 和条以及空格和条。最后,计数被打印到屏幕上。

相关内容