我有一个包含以下信息的文件:

start pattern1
line1
line2
...
end pattern1
line3
line4
start pattern2
...

我的输出应该是:start pattern1line1line2end pattern1
如果我知道pattern1是什么,我可以做
sed '/start pattern1/,/end pattern1/p' <file>

但是在这里,我想匹配pattern1(如perl regex中的\S+)并最终使用相同的字符(如$1)。我怎样才能做到这一点?

最佳答案

在Perl中使用range operator时,无法同时测试模式

perl -wnE'print if /start ([A-Za-z0-9_:]+)/ ... /end $1/' intput.txt

更新为实际模式,在注释中指定。

我使用捕获(在do块中而不是print进行了测试)进行了测试,它可以工作,但是如果还有其他捕获,则问题可能在于等待。如果您没有在其他正则表达式中捕获任何内容,则可以使用。

请注意,使用...而不是..,直到下一次评估才测试正确的操作数。

关于perl - grep或sed使用相同的模式匹配开始和结束之间的块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45688690/

10-10 08:07