grep -w を使用した Bash スクリプト

grep -w を使用した Bash スクリプト

次のコマンドを使用しています: x.txt | grep -w 'in' そして、次のような回答が返されます: in into ... など。

私は答えだけが欲しい:

コマンドをどのように変更すればよいでしょうか?

答え1

まず、コマンドは

grep -w in x.txt

現在のパイプは機能せず、catパイプするだけでファイルには不要です。grepファイルを直接読み取ることができます。

2 番目に、 は-wまさにあなたが望むことを実行します。man ページから:

-w, --word-regexp

単語全体を形成する一致を含む行のみを選択します。テストでは、一致する部分文字列が行の先頭にあるか、単語を構成しない文字が先行している必要があります。同様に、行の末尾にあるか、単語を構成しない文字が後続している必要があります。単語を構成する文字は、文字、数字、およびアンダースコアです。

grep返します完全な行ただし、この単語が出現する場所は の機能ですgrep。このため混乱しないように注意するために言及しています。

もし、あんたがただあなたが言うように、単語を返したい、あなたはすることができます

grep -ow in x.txt

-o一致する部分のみを返しますが、これはあまり実りがないようです。本当に何をしようとしているのですか?


編集:明確な例:

$ cat test
word in word
within word
word word
$ grep -w in test
word in word

「within」は一致しません。

編集2:もう一つの例:

$ grep '\<in\>' test 
word in word

編集3:問題はスウェーデン語の文字にあると説明されました。環境変数をLANGに設定しても、この問題を再現できますsv_SE.UTF-8https://stackoverflow.com/questions/9260293/egrep-accented-characters-not-recognised-as-part-of-a-word最も簡単な解決策として、UTF-8 固有のタスクに Perl を使用することを提案します。


編集4:sedこれをスウェーデン語の文字で動作させるには、次の方法を使用できるようです:

$ cat test
word den word
avträden word
word word
$ sed -n '/\bden\b/p' test
word den word
$ sed -n '/\<den\>/p' test
word den word

これは実用的な解決策ですが、このタスクには有効であることを願っています。

関連情報