我的问题与shell 脚本类似:搜索和替换多行,但有一个小例外。
在链接的问题中,用户想要这样做:
source:
[stuff before]
<!--WIERD_SPECIAL_COMMENT_BEGIN-->
[stuff here, possibly multiple lines.
<!--WIERD_SPECIAL_COMMENT_END-->
[stuff after]
target:
[stuff before]
[new content]
[stuff after]
我的问题类似,我想这样做:
source:
[stuff before]
<!--WIERD_SPECIAL_COMMENT_BEGIN-->
[this]
<!--WIERD_SPECIAL_COMMENT_END-->
<!--WIERD_SPECIAL_COMMENT_BEGIN-->
[not this]
<!--WIERD_SPECIAL_COMMENT_END-->
[stuff after]
target:
[stuff before]
[new content]
<!--WIERD_SPECIAL_COMMENT_BEGIN-->
[not this]
<!--WIERD_SPECIAL_COMMENT_END-->
[stuff after]
在适当的多行正则表达式中,这很容易做到:
/<!--WIERD_SPECIAL_COMMENT_BEGIN-->.*[this].*<!--WIERD_SPECIAL_COMMENT_END-->/m
但是链接问题中建议的答案使用正则表达式作为不允许检查两个外围边界之间的线的范围。
有没有办法将一个范围内的所有行添加到模式缓冲区,以便我可以一次对所有行进行正则表达式?例如:
sed '
#range between comment beginning and comment end
/<!--WIERD_SPECIAL_COMMENT_BEGIN-->/,/<!--WIERD_SPECIAL_COMMENT_END-->/
#Do something to add the lines in this range to pattern buffer
/.*[this].*/d
#Delete all the lines if [this] is in the pattern buffer
' <in.txt >out.txt