数一数文件测试中有多少字.txt以"tol"开头?



我是Linux shell的新手。我知道有一些工具可以做这件事,比如awk。但我想知道我是否可以使用 grep 或 wc 或其他命令来做到这一点?awk对我来说似乎很吓人。谢谢。

我尝试了 grep 和 wc,就像这样:

grep tol test.txt | wc -w

但是 grep 会给我整条线。

如果我尝试以下操作:

grep '^tol$*' test.txt | wc -w

它只计算以 mol 开头的线。

我怎样才能对以 tol 开头的单词进行 grep?

类似的东西:

grep -o '<tol[[:alpha:]]*>' test.txt | wc -w

<- 对于单词的开头,

>- 单词的结尾。

[[:alpha:]]- 避免匹配像 tol123 这样的组合(你说你只需要单词(。

-o- 仅显示匹配项,而不显示整行。

你可以相当简单地用awk做同样的事情,例如

awk '{for(i=1;i<=NF;i++) $i~/^tol/ && n++} END {print n}'

$ echo -e "tolerance topaz tolstoynbats toluene toledo" |
> awk '{for(i=1;i<=NF;i++) $i~/^tol/ && n++} END {print n}'
4

另一种选择是将所有空格字符转换为换行符,以便每个单词都以新行开头,然后grep可以自行计算它们:

echo -e "tolerance topazttolstoynbats toluene toledo" | tr '[:space:]' 'n' | grep -c "^tol"
4

或者,如果使用名为words.txt的文件:

tr '[:space:]' 'n' < words.txt | grep -c "^tol"

相关内容

  • 没有找到相关文章

最新更新