使用sed插入一行

时间:2016-10-27 18:35:58

标签: linux replace sed

我的ini文件看起来像:

...
abc = 123
def = 456
...

我想将其更改为:

...
abc = 123
xyz = 987
def = 456
...

我已经不成功地尝试了这个: sed -i 's/abc = 123\ndef = 456/abc = 123\nxyz = 987\ndef = 456/g' myfile.ini 如何解决对sed的调用以使其正常工作?

4 个答案:

答案 0 :(得分:2)

Workbooks.Open Filename:=

答案 1 :(得分:2)

sed的另一种方法:

sed '/abc = 123/N;s/\ndef = 456/\nxyz = 987&/' myfile.ini

答案 2 :(得分:0)

Sed自然只会查看一行,因此无法找到'\n'字符。最简单的解决方案是将所有'\n'替换为另一个临时字符,例如' \ f' (换页符)。

这是我一直在使用的hackish方法。 (为清楚起见,分开)

cat myfile.ini |
tr '\n' '\f' |
sed -e "s/abc = 123\fdef = 456/abc = 123\fxyz = 987\fdef = 456/g" |
tr '\f' '\n'

'\f'是换页符。如果您使用的是MacOS,则需要在sed语句中将所有'\f'替换为$(printf '\f')

注意:我还建议使用sed分组语法使您的模式更易于阅读。

用sed进行多行编辑很难。您应该查看perl以进行更复杂的编辑。

答案 3 :(得分:0)

这是一种在模式后附加一行的便携方法:

<myfile.ini sed '/abc = 123/a\
xyz = 789
'

输出:

abc = 123
xyz = 789
def = 456