使用SED从文件

时间:2016-02-09 11:31:43

标签: sed

我有一个文本文件如下:

[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:/]块中的面团。

2 个答案:

答案 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,则会删除该地址。否则,将打印该行,然后将其与章节信息一起删除。