正则表达式替换为多行

时间:2012-08-20 07:04:24

标签: regex perl awk

我需要在两行之间替换一个字符串。例如:

"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"

那么有一个很好的方法来处理它吗?

perlawk都可以。

1 个答案:

答案 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}'