如何使用 egrep 搜索字符串

0 grep text-processing

我想搜索具有 [RT]"anything"D 的字符串,这意味着第一个字符可以是 R 或 T,下一个字符可以是任何东西,直到 D 出现我应该使用它是“egrep”吗?

B L*_*yer 6

如果你有 GNU grep 和 Perl 兼容的正则表达式 (PCRE) 支持(启用-P),那么你可以这样做:

grep -o -P 'RT.*?D' file
Run Code Online (Sandbox Code Playgroud)

我们想要 PCRE,因为它有惰性量词( ?),我们可以使用它.*而不是.*单独使用。后者是贪婪的,会吞噬一切,直到最后 D......

$ grep -o 'RT.*D' <<< "JKIRTTHIUCDELKJUCDE"
RTTHIUCDELKJUCD
$ grep -o -P 'RT.*?D' <<< "JKIABTHIUCDELKJUCDE"
RTTHIUCD
Run Code Online (Sandbox Code Playgroud)

哦,-o标志告诉grep只打印一行的匹配部分,而不是打印整行的默认行为。

注意:这是从一个类似的、现在封闭为重复的问题合并而来的,它有一个重要的区别:模式的最后一部分是多字符而不是D这里的单字符。单字符情况可以在没有 PCRE 的情况下处理(请参阅此处的其他答案),但多字符情况需要 BRE 或 ERE 语法不可用的功能。