Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SED从文件中的一组类似实例中提取和删除特定行_Sed - Fatal编程技术网

使用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