
次のコマンドを使用しています: 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-8
。https://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
これは実用的な解決策ですが、このタスクには有効であることを願っています。