使用SED从文件中的一组类似实例中提取和删除特定行
我有一个文本文件,如下所示:使用SED从文件中的一组类似实例中提取和删除特定行,sed,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 在这里,我想根据第一个单词搜索删除一个字符串,即我想从demo([demo://])块中删除“ruam=rw”行。它不应从存储库([reposi
[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
在这里,我想根据第一个单词搜索删除一个字符串,即我想从demo([demo://])块中删除“ruam=rw”行。它不应从存储库([repository://])块中删除面团
我可以使用以下命令获取演示块:
sed '/\<demo\>/,/^$/!d' a.txt
sed'/\/,/^$/!d'a.txt
但在同一命令中,我想删除演示块特定文本文件中的面团行,而不删除[repository:/]块中的面团。用于打印演示块的命令是正确的方法。您可以使用相同的地址:
/\/,/^$/
;它的意思是“在demo
和空行之间”。但是动作不会是!d
,不删除,但“删除面团”:
我将第一个地址更改为\[demo:\/\]
,这样即使某个地方有名为demo
的用户,命令也能正常工作。这可能适合您(GNU-sed):
这将在保留空间中保存每个节,然后将其附加到每一行。然后检查地址,查看它是否是
demo
部分的一部分,并且该行是否包含ruam=rw
它将被删除。否则,该行将被打印,然后与部分信息一起删除。您几乎拥有了它!只需在演示段落匹配后的面团匹配上添加一个delete,而不是notdelete:sed'/\/,/^$/{/mough/d}'
sed -e '/\[demo:\/\]/,/^$/{/^dough =/d}' a.txt
sed '/^\[/h;G;/^\[demo:/M{/dough = rw/d};P;d' file