2017-04-11 4 views
0

grepを使って定義された単語を含む行を取得します。grepを使って単語全体を取得する方法はありますか?

編集:ソリューションはthisです。

私は-wオプションを使うことができると知っていますが、そのトリックはしていないようです。

たとえば、句読記号で区切られた定義済みの単語を含むすべての単語が含まれます。私は犬を探している場合、それは私を見るだけでなく含む行は言葉だけでなく、cats.dogs、猫、犬など

# cat file.txt 
some alphadogs dance 
some cats-dogs play 
none dogs dance 
few dog sing 
all cats.dogs shout 

とgrepを持つ犬:

# cat file.txt | grep -w "dogs" 
some cats-dogs play 
none dogs dance 
all cats.dogs shout 

所望の出力を:

# cat file.txt | grep -w "dogs" 
none dogs dance 

単語全体を取得するための回避策はありますか?私は\ bまたは\ <でそれをテストしました。

おかげで、 Eudald

+0

ショーへの出力が予想出力 – 123

+2

'-w'は明らかにここ@triplee動作しないでしょうgrepするときcatは無用である、それはすることはできません現在の質問に複製されています – Inian

+1

句読点や行頭の終わり/開始が単語でない文字として表示されるため、 'grep -w'は失敗します。また、たとえそれがうまくいっても、実装は非常に遅くなる可能性があります。 –

答えて

1

使用ワード境界アンカーは、grepの任意のバージョンでは、あなたは、

アンカー

grep '^dogs$' file.txt 

このregular-expressionsページからの抜粋

がインストールされています

[..]アンカーはどの文字とも一致しません。彼らはポジションにマッチします。文字列の先頭に^マッチし、文字列の末尾にマッチ$ [..]

+0

私が提供した例でテストしましたか?それは動作しません –

+0

@ eudald_v:あなたは私たちにあなたのサンプルアップデートをお知らせし、タイムスタンプを参照してください知らせていませんでした。問題はありません。あなたの問題を解決する 'grep '[[:space:]] dogs [[:space:]]' file'を試してみてください。 – Inian

+0

の場合は、文字列の前にスペースがある場合にのみサンプルを解決しますが、サンプルでは発生しますが、文字列が文の先頭または末尾にある場合は発生しません。とにかく、私は最終的にそれが動作することを発見した答えでもう一度質問を編集しました。 –

1

-xパラメータを使用して試してみてください:。

grep -x dogs file.txt 

マニュアルgrepから:

-x、--line-regexp

行全体と完全に一致するものだけを選択してください。 (-xは、POSIXによって指定される。)

注:パイプgrep

+0

私が提供した例でテストしましたか?それは動作しません –

関連する問題