隔离字符串中某个单词的一个特定实例

Uni*_*ser 3 grep text-processing

我有一个grep处理字符串的命令

test-test test
Run Code Online (Sandbox Code Playgroud)

我希望该命令仅向我显示突出显示的“独立”一词test,而不是test-test.

然而,当我跑步时

test-test test
Run Code Online (Sandbox Code Playgroud)

test突出显示了所有发生的情况。

是否可以将匹配限制为仅孤立出现test

Sté*_*las 7

所有test出现的内容都以粗体显示,因为-w单词是由非单词字符分隔的单词字符序列,单词字符是字母数字和下划线。-不是单词字符。

在 中testing-test+test2;test_3;untested,只有第二个test匹配项匹配,因为这是唯一一个前面或后面都没有单词字符的匹配项。

如果要匹配以空格分隔的单词,则必须手动指定这些环视断言,并且需要与 perl 兼容的正则表达式来实现并非所有grep实现都支持的正则表达式。由于您似乎有一个grep='grep --color别名,如果您grep支持--color,那么它也有可能支持-P/-X perl选项,然后您可以执行以下操作:

grep --color -P '(?<!\S)test(?!\S)'
Run Code Online (Sandbox Code Playgroud)

(?<!...)分别(?!...)perl regexps 中的负向后查找和向前查找断言运算符。\S,就像 POSIX 的[^[:space:]]匹配和不属于空白的字符。这就是说:“test只要它前面或后面都没有非空白字符,就匹配”。