【发布时间】:2018-04-15 12:51:03
【问题描述】:
在shell脚本中,如何在某个模式之后添加行?假设我有以下文件,我想在block 1 和blk 2 之后添加两行。
abc
def
[block 1]
apples = 3
grapes = 4
[blk 2]
banana = 2
apples = 3
[block 1] 和 [blk 2] 将出现在文件中。
我期望的输出如下。
abc
def
[block 1]
oranges = 5
pears = 2
apples = 3
grapes = 4
[blk 2]
oranges = 5
pears = 2
banana = 2
apples = 3
我想用sed 来做这件事。我尝试了以下命令,但它在我的 Mac 上不起作用。我检查了theseposts,但我找不到我做错了什么。
$sed -i '/\[block 1\]/a\n\toranges = 3\n\tpears = 2' sample2.txt
sed: 1: "sample2.txt": unterminated substitute pattern
我该如何解决这个问题?感谢您的帮助!
[编辑] 我尝试了以下方法,但这些在我的 Mac 上不起作用。
$sed -E '/\[block 1\]|\[blk 2\]/r\\n\\toranges = 3\\n\\tpears = 2' sample2.txt
abc
def
[block 1]
apples = 3
grapes = 4
[blk 2]
banana = 2
apples = 3
$sed -E '/\[block 1\]|\[blk 2\]/r\n\toranges = 3\n\tpears = 2' sample2.txt
abc
def
[block 1]
apples = 3
grapes = 4
[blk 2]
banana = 2
apples = 3
awk 尝试:
$awk -v RS= '/\[block 1\]/{$0 = $0 ORS "\toranges = 3" ORS "\tpears = 2" ORS}
/\[blk 2\]/{$0 = $0 ORS "\toranges = 5" ORS "\tpears = 2" ORS} 1' sample2.txt
abc
def
[block 1]
apples = 3
grapes = 4
[blk 2]
banana = 2
apples = 3
oranges = 3
pears = 2
oranges = 5
pears = 2
【问题讨论】:
-
尝试不就地或提供备份名称。
-
我仍然收到错误消息。 sed '/[block 1]/a\n\toranges = 3\n\tpeas = 2' sample2.txt sed: 1: "/[block 1]/a\n\torang ...": \ 后面的额外字符在命令的末尾