使用sed命令

时间:2016-06-10 13:23:08

标签: linux sed append

实际上,我试图在配置文件" testfile"中的节标题后直接插入一行文本。有点像这样:

[default]

[stuff]

[stuff_test]

[end]

目标是插入一行文字" variable = 1"直接在[东西]之后和之后。这是" testfile"

的理想输出
[default]

[stuff]
variable = 1

[stuff_test]

[end]

当我尝试使用sed的附加功能时:

sed -i "/[stuff]/ a variable = 1" testfile

我得到以下内容:

[default]
variable = 1

[stuff]
variable = 1

[stuff_test]
variable = 1

[end]

我的问题是为什么它会在前三个节中插入文本而不仅仅是我想要的第二节?我尝试使用完全匹配,但我可能有上下文错误?已经尝试了以下其他努力:

sed -i "/\<[stuff]\>/ a variable = 1" testfile

sed "/\<\[stuff\]\>/ a variable = 1" testfile

这不会在文件中插入任何文本。如何才能在&#34; [stuff]&#34;之后插入sed。节?

2 个答案:

答案 0 :(得分:4)

地址/[stuff]/被解释为正则表达式,即匹配包含任何字符stu或{{1}的任何行}。要避免将解释作为括号表达式,您必须转义方括号:

f

答案 1 :(得分:2)

awk

awk 'NF > 0 && $0 ~ /\[stuff\]/{$0=$0RS"variable = 1"} 1' file

检查NF: number of field是否大于零并且匹配stuff regex,然后在RS: record seperator附加一行,这是带有预期值的换行符