Mac*_*iej 5 sed regular-expression
我在使用 sed 删除两个模式之间的部分字符串时遇到问题。我总是将最后一个 PATTERN-2 排成一行:
测试.txt:
PATTERN-1xxxxPATTERN-2aaa
PATTERN-1xxxxPATTERN-2fffPATTERN-1zzzzPATTERN-2gggPATTERN-1zzzzPATTERN-2
PATTERN-1xxxxPATTERN-2bbb
Run Code Online (Sandbox Code Playgroud)
指令
sed 's/PATTERN-1.*PATTERN-2//g' test.txt
Run Code Online (Sandbox Code Playgroud)
上面的结果是
aaa
bbb
Run Code Online (Sandbox Code Playgroud)
但我想要
aaa
fffggg
bbb
Run Code Online (Sandbox Code Playgroud)
是否可以找到最接近 PATTERN-1 的 PATTERN-2?
正如 @steeldriver 指出的,如果您有非贪婪的正则表达式,这很容易。如果没有,您可以使用循环来完成,如下所示:
\n\nsed ':a;s/PATTERN-2/\\n/;s/PATTERN-1.*\\n//;ta' test.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n这是有效的,因为我们知道任何行的中间都没有换行符。它也适用于未出现在任何行中的任何其他字符,例如\xc2\xa7
。