我有一个包含以下信息的文件:
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/