有几个例子说明如何使用sed基于匹配一般模式将行添加到行尾。 Here's one example
在该示例中,海报以
开头somestuff...
all: thing otherthing
some other stuff
并希望添加到all:
的末尾,如下所示:
somestuff...
all: thing otherthing anotherthing
some other stuff
一切都很好。但是,如果anotherthing
已经存在,会发生什么?!
我想找到以all:
开头的行,测试是否存在 anotherthing
,仅添加它在这条线上缺失。
我该怎么做?
我的具体案例是测试kernel
中grub.conf
行是否存在boot=
和fips=1
,并仅在中添加其中一个或两个参数 / em>他们还没有上线。 (我希望搜索/添加为idempotent。)
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed '/^all:/!b;/anotherthing/!s/$/ anotherthing/' file
取消发布任何不以all:
开头的行,只替换不包含anotherthing
的行。
答案 1 :(得分:1)
您可以使用此awk
检查是否存在给定字符串,并仅在不存在时附加它:
awk -v s='anotherthing' '/^all:/ && $0 !~ s "$" { $0 = $0 OFS s } 1' file
答案 2 :(得分:1)
使用anotherthing略过行并将其添加到以all:
sed '/anotherthing/!s/^all:.*$/& anotherthing/' file