我正在尝试用文本替换文件中的两个连续行。例如:
的 testfile.rb
class Test
def procedure
nil
end
end
我正在努力实现这一目标:
的 testfile.rb
class Test
def procedure
nil
finish
finish
所以我需要替换最后2行,但这不起作用:
sed -i 's/^\s\send\nend/ finish\nfinish/' testfile.rb
我知道它失败了,因为替换是逐行的。但是我怎么能这样做呢?
答案 0 :(得分:3)
sed '/end$/N;//s/end/finish/g' testfile.rb
结果
class Test
def procedure
nil
finish
finish
end
的情况下查看一对行,所以
当第一行以end
end
替换为finish
答案 1 :(得分:1)
perl -i -0777 -pe 's/\bend\s*\n\s*end$/finish\nfinish/ms' testfile.rb
此代码段适用于多行模式。 sed
默认为一行。
答案 2 :(得分:0)
另一种方式:
sed 'N;s/^ end\nend$/ finish\nfinish/;t;P;D' testfile.rb
灵活的缩进:
sed 'N;s/^\( *\)end\n\( *\)end$/\1finish\n\2finish/;t;P;D' testfile.rb
要获得更灵活的缩进,请将空格更改为[[:space:]]
。