grep -w 忽略连字符[-]

Car*_*rol 2 grep

我有sample.txt如下文本文件

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
Run Code Online (Sandbox Code Playgroud)

我想使用 grep 提取仅包含 S-PA 的行。我尝试了以下命令:

grep -w "S-PA" sample.txt
Run Code Online (Sandbox Code Playgroud)

但它给出的输出包含我不想要的所有条目。我想要以下输出

 ID=S-PA.path1;Name=S-PA 69 ivcs 
Run Code Online (Sandbox Code Playgroud)

请指导我。提前致谢。

Hak*_*aba 5

使用负前瞻和后瞻。

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

实际上,您-出于单词边界考虑而将其包含在“单词”中。

(?<![\w-])确保S-PA前面没有单词字符 或-。同样(?![\w-])确保以下字符也是如此。