gpt4 book ai didi

regex - 删除 SED 中指定标签内匹配前后的行

转载 作者:行者123 更新时间:2023-11-29 09:32:56 26 4
gpt4 key购买 nike

需要删除标签内匹配模式的前后

< mds:insert> 
< attributeValues>
< AttrNames
< Item Value="MyContact_c"/>
< /AttrNames>
< /attributeValues>
< /mds:insert>

使用

sed -i -n '/MyContact_c/{s/.*//;x;d;};x;p;${x;p;}' $file

只删除匹配模式前后的行,需要删除 mds:insert 标签内的所有内容...任何指针都会有帮助。

最佳答案

它不是 sed,但这是一个用于 ex 的,使用您发布的片段作为 $file 的文件内容:

kitsune:~$ printf '%s\n' 'set ic
1;/="MyContact_c"/<|?<mds:insert?+;/<\/mds:insert>/-d
%p' | ex -s $file

输出:

<mds:insert>
</mds:insert>

这将在删除该部分的第一个实例后打印文件的剩余部分。如果您希望为所有实例完成此操作,命令行将如下所示:

'set ic
g/="MyContact_c"/<|?<mds:insert?+;/<\/mds:insert>/-d
%p'

如果您希望对多个文件执行此操作,则可以在 shell 脚本的 for 循环中使用它。如果您这样做,您自然会需要一个备份副本,因此如果您打算覆盖它,请确保在更改文件之前复制该文件。

顺便说一句,如果您曾经使用过 Vim 甚至 vi,这些命令用于保存、退出等。恕我直言,将 ex 添加到您的知识工具箱是值得的。

编辑

C Shell 用户不能按原样使用这些命令,因为它们包含带引号的换行符,这在 C Shell 中是不允许的。相反,您可以像这样修改第一个命令:

kitsune:~% printf '%s\n%s\n%s\n' 'set ic' '1;/="MyContact_c"/<|?<mds:insert?+;/<\/mds:insert>/-d' '%p' | ex -s $file

您可以对另一个字符串进行类似的操作。

免责声明:我自己不是 C shell 用户,所以可能有更好的方法,但我不知道。

关于regex - 删除 SED 中指定标签内匹配前后的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com