假设我有一个脚本,我想为一行更改几行。
例如,我有一个可以汇总多个命令的新函数,因此我可以在脚本中替换如下:
原始
some_code
command1
command2
command3
some_more_code
被修改
some_code
foo()
some_more_code
你会怎么用sed做到这一点?
答案 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
&\\^$[]{}().
)的信息答案 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