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