如何使用egrep搜索字符串

如何使用egrep搜索字符串

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

答案1

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

grep -o -P 'RT.*?D' file

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

$ grep -o 'RT.*D' <<< "JKIRTTHIUCDELKJUCDE"
RTTHIUCDELKJUCD
$ grep -o -P 'RT.*?D' <<< "JKIABTHIUCDELKJUCDE"
RTTHIUCD

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

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

答案2

正如评论所说。grep足以完成这项工作。将您的模式写为[RT].*D.

要获得 的首次外观D,请使用[RT][^D]*D.

由于问题中的“第一个字符”,我添加了一个插入符号。意识到这个短语可能意味着不同的东西后,我现在删除了插入符号。

相关内容