使用sed在正则表达式模式之间删除多行文本块

时间:2015-01-05 08:13:59

标签: regex bash awk sed

我需要在大型xml文件中删除重复的文本块。我想保留第一个块并在同一个xml标记中删除第二个块。例如:

<!--#if--> 
 -- several lines of text
<!--#else-->
-- several lines of the same text
<!--#endif-->

我想删除else和endif之间的第二个块,并保持if和else标记之间的块。任何帮助非常感激 - 脚本最终会删除整个文件。

sed -i '/^<!--#else-->/ {p; :a; N; /^\<\!--\#endif--\>/!ba; s/*.\n//}; d' test.xml

1 个答案:

答案 0 :(得分:4)

我认为这应该对你有用

sed '/--#else--/,/--#endif--/{//!d}' test.xml

这将删除elseendif

之间的行

如果您要删除elseendif,请使用此选项:

sed '/--#else--/,/--#endif--/d' test.xml

如果你在评论中提到的话,试试这个:

sed -n '/--#else--/,/--#endif--/p' test.xml

-n默认情况下不打印,而/p执行打印时/!d执行删除