wc -w コマンドが誤った回答を出力します。

wc -w コマンドが誤った回答を出力します。

ファイル内でshellという単語が何回使用されたかを調べる必要があります。単語が何回使用されたかを数えてみましたが、grep "shell" test.txt | wc -w結果は3ではなく4でした。ファイルの内容は次のとおりです。

this is a test file
for shell_A
shell_B
sh
shel
and 
shell_C
script project

ベストアンサー1

wc コマンドは、「for」を含む grep 出力のワード数を計算します。

> grep shell test.txt
for shell_A
shell_B
shell_C

だから実際には4つの言葉があります。

特定の単語を含むファイルの行数のみを計算するには、-cgrepオプションを使用できます。たとえば、次のようになります。

grep -c shell test.txt

これらのどれも実際には重要ではありません。性格ただし、次のような他のコンテンツと一致する可能性があります。ひも。ほとんどのgrep実装(GNU grep、最新のBSD、AIX、HPUX、Solaris)は-w単語オプションを提供しますが、それPOSIXにはありません。また、正規表現も認識します。たとえば、次のようになります。

grep -e '\<shell\>' test.txt

この-wオプションに対応します。また、それPOSIXにはありません。さすがソラリス文書このため、AIXおよびHPUXの説明では-w正規表現については言及しません。これらはすべて一貫して見えます。 「単語」を下線の英数字のシーケンスとして考えてください。

grepでPOSIX正規表現を使用して単語(スペースなどで区切られた)を一致させることができますが、例のどれも単純な「シェル」ではありません。すべて一致する別の文字があります。または英数字のみに興味がある場合(そしていいえアンダースコア)部分文字列を一致させても大丈夫です。

tr -c '[[:alnum:]]' '\n' test.txt |grep -c shell

提案されたオプション-oはPOSIXではなく、OPが質問をLinuxまたはBSDに限定していないため、推奨されるオプションではありません。どちらの場合も一致しません。性格、しかしひも(これはOPの期待です)。

参考までに:

おすすめ記事