我有一个文本文件如下:
[groups]
grp = john, perk, honda, choco, dough
devops = john, honda, perk
[repository:/]
@devops = r
john = rw
honda = r
dough = r
[demo:/]
@grp = r
dough = rw
这里我想删除一个基于第一个单词搜索的字符串,即我想删除" dough = rw"来自demo([demo:/])块的一行。它不应该从存储库([repository:/])块中删除面团。
我可以使用以下命令获取演示块:
sed '/\<demo\>/,/^$/!d' a.txt
但是在同一个命令中,我想删除特定于demo块的文本文件中的面团线而不删除[repository:/]块中的面团。
答案 0 :(得分:0)
用于打印演示程序块的命令是正确的方法。您可以使用相同的地址:/\<demo\>/,/^$/
;它的意思是“在demo
和空行之间”。但是行动不会是!d
,不要删除,而是“删除面团”:
sed -e '/\[demo:\/\]/,/^$/{/^dough =/d}' a.txt
我将第一个地址更改为\[demo:\/\]
,这样即使在某处有一个名为demo
的用户,该命令也能正常工作。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '/^\[/h;G;/^\[demo:/M{/dough = rw/d};P;d' file
这会保存保留空间中的每个部分,然后将其附加到每一行。然后检查地址以查看它是否属于demo
部分,如果该行包含dough = rw
,则会删除该地址。否则,将打印该行,然后将其与章节信息一起删除。