2017-09-06 69 views
2

我有像以下grep的-w是忽略連字符[ - ]

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我想提取僅含有S-PA用grep行。我試過下面的命令:

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遵循的空間。使用

grep '=S-PA ' sample.txt 

grep '=S-PA[[:blank:]]' sample.txt 

其中[[:blank:]]匹配一個普通的空格或製表符字符。

參見this regex demo showing how this regex works