2017-09-06 6 views
2

私は私はS-PA使用のgrepを含む行を抽出したいgrepは[ - ]

ID=Sam-S-PA.path1;Name=Sam-S-PA 23 Hz42 
ID=GlcAT-S-PA.path1;Name=GlcAT-S-PA 45 iu7s 
ID=TfIIA-S-PA.path1;Name=TfIIA-S-PA 76 5ghz 
ID=S-PA.path1;Name=S-PA 69 ivcs  
ID=TyrRS-PA.path1;Name=TyrRS-PA 51 Pqas 
ID=HisRS-PA.path1;Name=HisRS-PA 32 Majs 

を以下のようなテキストファイルsample.txtを有します。私は次のコマンドを試してみました:

grep -w "S-PA" sample.txt 

しかし、それは私がしたくないすべてのエントリを含む出力を与えました。私は次の出力をしたい

ID=S-PA.path1;Name=S-PA 69 ivcs 

私を親切に案内します。前もって感謝します。

+0

私のソリューションはあなたのために機能しませんか?チェックしてください。 –

答えて

4

ネガティブルックアヘッドとルックバックを使用します。

$ grep -P '(?<![\w-])S-PA(?![\w-])' sample.txt 
ID=S-PA.path1;Name=S-PA 69 ivcs 

効果的には、単語境界の考慮のために「単語」に-を含めます。

(?<![\w-])S-PAの前に単語文字または-が付いていないことを確認してください。 同様に(?![\w-])は、次の文字について同じことを保証します。

2

正規表現を使用します。

grep -oE "S-PA (.+)" sample.txt

または

egrep -o "S-PA (.+)" sample.txt

2

あなたが=S-PAは、スペースで続い一致させたいようです。どこ[[:blank:]]一致する正規のスペースまたはタブ文字のいずれか

grep '=S-PA ' sample.txt 

または

grep '=S-PA[[:blank:]]' sample.txt 
を使用してください。

this regex demo showing how this regex worksを参照してください。