使用sed用一行替换脚本中的多行

时间:2015-05-07 12:58:41

标签: sed

假设我有一个脚本,我想为一行更改几行。

例如,我有一个可以汇总多个命令的新函数,因此我可以在脚本中替换如下:

原始

some_code
command1
command2
command3
some_more_code

被修改

some_code
foo()
some_more_code

你会怎么用sed做到这一点?

4 个答案:

答案 0 :(得分:1)

我在这里回答我自己的问题。

我无法一次性找到办法,所以我将问题分成两部分。

第1部分:替换第一行

sed -e 's/command1/foo()/g' file1 > file2

第2部分:删除其余部分

sed -e '/command2/,+1d/' file2 > file3

我更喜欢更优雅的方式,我可以灵活处理我要替换的行数,可能与块中的最后一个命令匹配。有什么想法吗?

答案 1 :(得分:1)

sed '/some_code/,/command3/ !b
/some_code/ b
/command3/ a\
foo()
d' YourFile
  • 在任何模式(除了你的foo()行之外)中关于元字符(如&\\^$[]{}().)的信息

答案 2 :(得分:1)

只需使用awk:

$ awk -v RS='^$' -v ORS= '{sub(/command1\ncommand2\ncommand3/,"foo()")}1' file
some_code
foo()
some_more_code

以上使用GNU awk进行多字符RS。

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed '/command1/,/command3/c\foo()' file