
ファイル内で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つの言葉があります。
特定の単語を含むファイルの行数のみを計算するには、-c
grepオプションを使用できます。たとえば、次のようになります。
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の期待です)。
参考までに:
答え2
「grep」コマンドは、「シェル」が表示される行全体を出力します。ただ「シェル」という言葉ではありません。次のように:
grep shell test.txt
for shell_A
shell_B
shell_C
このオプションを使用することをお勧めします
-o、--matchのみ
だから:
grep -o "shell" test.txt | wc -w
答え3
「shell」という単語は1行に複数回表示されるため、最初にテキストを1行に1単語に分割してからgrepを実行します。
< test.txt tr -s "[[:blank:]]" "\n" | grep "shell" | wc -w
を使用、キャンセル、wc -l
使用wc
することもできます。grep -c "shell"
tr
自分が所有して使用するファイルを必要としないようにすることもできます。
grep -c "シェル" test.txt
答え4
wc -l
これを使用する必要があります(例:grep shell test.txt | wc -l
3を返します)。