我想使用egrep匹配内部模式,这些内部模式是更大的外部模式的子集。例如:

$ egrep 'b.*a' <<< baababaa
baababaa


我要打印:

baa
ba
baa

最佳答案

egrep并不是真正适合该工作的工具,因为grep受输出控制的限制。相反,sed可以使用基本正则表达式准确提供您所需的内容。

例如:

$ echo "baababaa" | sed 's/\(.\)b/\1 b/g'
baa ba baa


说明


sed 's/find/replace/g'-sed的通用替换形式,其中应用了'g'选项以使替换全局化,其中





'.'-匹配任何单个字符,并且
\(.\)-捕获\(...\)之间的单个字符,
后跟一个'b'


更换


\1插入向后引用(\(...\)之间捕获的字符),
后跟' '(空格)和'b'


仅查找所有内部"ab"并在它们之间放置空格的更有限的形式是:

sed 's/ab/a b/g'


仔细检查一下,如果您有任何疑问,请告诉我。

关于linux - 如何多次匹配内部模式而不是相似的外部模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55133842/

10-13 03:33