使用 sed 命令在 [stuff] 后面追加一行

use*_*014 3 linux sed append

实际上,我试图在配置文件“testfile”中的节标题后直接插入一行文本,如下所示:

[default]

[stuff]

[stuff_test]

[end]
Run Code Online (Sandbox Code Playgroud)

目标是在 [stuff] 之后且仅在 [stuff] 之后插入一行文本“variable = 1”。这是“testfile”所需的输出

[default]

[stuff]
variable = 1

[stuff_test]

[end]
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 sed 的 append 函数时:

sed -i "/[stuff]/ a variable = 1" testfile
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

[default]
variable = 1

[stuff]
variable = 1

[stuff_test]
variable = 1

[end]
Run Code Online (Sandbox Code Playgroud)

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

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

sed "/\<\[stuff\]\>/ a variable = 1" testfile
Run Code Online (Sandbox Code Playgroud)

这不会在文件中插入任何文本。如何仅在“[stuff]”节之后插入 sed?

Ben*_* W. 5

地址/[stuff]/被解释为正则表达式,即匹配包含任何字符s, t,u或 的任何行f。为避免解释为括号表达式,您必须转义方括号:

sed -i "/\[stuff\]/ a variable = 1" testfile
Run Code Online (Sandbox Code Playgroud)