У меня есть команда sed для комментирования команд xml
sed 's/^\([ \t]*\)\(.*[0-9a-zA-Z<].*\)$/\1<!-- Security: \2 -->/' web.xml
Принимает:
<a>
<!-- Comment -->
<b>
bla
</b>
</a>
Производит:
<!-- Security: <a> -->
<!-- Security: <!-- Comment --> --> // NOTE: there are two end comments.
<!-- Security: <b> -->
<!-- Security: bla -->
<!-- Security: </b> -->
<!-- Security: </a> -->
В идеале я бы не хотел использовать свой сценарий sed для комментирования уже прокомментированных вещей.
Ie:
<!-- Security: <a> -->
<!-- Comment -->
<!-- Security: <b> -->
<!-- Security: bla -->
<!-- Security: </b> -->
<!-- Security: </a> -->
Я мог бы сделать что-то вроде этого:
sed 's/^\([ \t]*\)\(.*[0-9a-zA-Z<].*\)$/\1<!-- Security: \2 -->/' web.xml
sed 's/^[ \t]*<!-- Security: \(<!--.*-->\) -->/\1/' web.xml
но я думаю, что один лайнер чище (?)
Это очень похоже: соответствует строке, которая не соответствует не содержат конкретный текст с регулярными выражениями