2013-07-12 22 views
16

私は大きなテキストファイルを持っています。私は正確な単語 "DUSP1"を含むすべての行を抽出する必要があります。ここ ラインの例:Grepは単語全体のみを抽出します

9606 ENSP00000239223 DUSP1 BLAST 
9606 ENSP00000239223 DUSP1-001 Ensembl 

私は最初の行ではなく、秒1を取得したいです。

私はいくつかのコマンドを試してみました:

grep -E "^DUSP1" 
grep '\<DUSP1\>' 
grep '^DUSP1$' 
grep -w DUSP1 

しかし、それらのどれも動作するようには思えません。どのオプションを使用する必要がありますか?

+0

"正確な単語"はどのように定義されていますか?そして、3番目の例では、 "DUSP1"という単語だけの行しか見つかりませんでした。 "^ DUSP1 [[:space:]] +"の行が必要ですか? –

+3

サンプルファイルのコンテンツを提供できますか?第2、第3、第4のコマンドは私のために働く。 – falsetru

答えて

13

あなたが直面している問題は、ダッシュ( - )は、単語の区切り文字としてgrepとみなされます。

このコマンドを試してみてください:

grep '\sDUSP1\s' file 

あなたの言葉の周りにスペースがあることを確実にするために。 DUSP1は、行の最後であれば

grep '\sDUSP1$' file 

:sputpickが、それはそれまたは可能性のいずれか、言ったことへの追加

+0

私の編集したポストを参照してください –

+0

うん!これは素晴らしい作品です!ありがとう –

29

あなたは正確に単語全体をgrep検索したい場合は、次のように単語の境界を使用することができます。

grep '\bDUSP1\b' 

これは、最初と最後で正確な単語の一致しました。

+5

これは受け入れられた答えでなければなりません、前と後のスペースが常にあるわけではありません(最後の単語はどうなりますか?)。 – user3671607

+1

これは素晴らしいです。 'setting = DUSP1'と' my/folder/to/DUSP1'にもマッチしますが、 'DUSP123'には一致しません。 – vikingsteve

+0

Windows版のGNU grepに二重引用符を使用する必要がありました。一重引用符は機能しませんでした。 –

関連する問題