我需要在两行之间替换一个字符串。例如:
"aaa\nfoo\nfoo\naaa\nfoo\nbbb\nfoo\nbbb"
==> "aaa\nfoo\nfoo\naaa\nright\nbbb\nfoo\nbbb"
我想使用类似于以下格式的perl但是失败了:
echo -e "aaa\nfoo\nfoo\naaa\nfoo\nbbb\nfoo\nbbb" | perl -pe "code here"
那么有一个很好的方法来处理它吗?
perl
和awk
都可以。
答案 0 :(得分:4)
的Perl:
echo -e "aaa\nfoo\nfoo\naaa\nfoo\nbbb\nfoo\nbbb" | perl -p00e 's/aaa\nfoo\nbbb/aaa\nright\nbbb/'
如果需要匹配模式多行,则必须更改记录分隔符。标志m和s也很有用。
另见
perl --help # -0
perldoc perlvar # $/
perldoc perlre # /Modifiers
perl -MO=Deparse -p00e 's/aaa\nfoo\nbbb/aaa\nright\nbbb/'
awk中:
echo -e "aaa\nfoo\nfoo\naaa\nfoo\nbbb\nfoo\nbbb" | awk 'BEGIN{RS=""}{sub(/aaa\nfoo\nbbb/,"aaa\nright\nbbb",$0);print}'