【发布时间】:2016-06-10 13:23:07
【问题描述】:
实际上,我试图在配置文件“testfile”中的节标题之后直接插入一行文本,如下所示:
[default]
[stuff]
[stuff_test]
[end]
目标是在 [stuff] 之后且仅在 [stuff] 之后直接插入一行文本“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
这不会在文件中插入任何文本。如何让 sed 仅在“[stuff]”节之后插入?
【问题讨论】:
-
awk 'NF > 0 && $0 ~ /[stuff]/{$0=$0" 变量 = 1"} 1' 文件。用 awk 作为替代
-
感谢您尝试切特。您的命令实际上与我的第一个示例 sed 命令执行相同的操作,只是它不会将其插入以下行,而是直接在与前三个节相同的行之后,并且不会插入到文件中:即:[default] 变量= 1
-
你能添加一个示例输出吗?我想不通
-
问题中包含示例输出,是不是不够清楚?
-
现在知道了。回答了