Как заменить строку XML-файла с помощью sed

У меня есть следующий текст в File.XML:

<http-listener name="default" socket-binding="http" max-post-size="1073741824" />

Я хотел бы заменить это

<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>

Я попробовал

sed -i 's/<http-listener name="default" socket-binding="http" max-post-size="1073741824" /><!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>' test.xml

Но получил ошибку

2
задан 2 August 2018 в 09:26

1 ответ

Вставьте необходимый блок (<!--) в запуске (^):

sed 's/^/<!-- /'

Пример:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^/<!-- /' <<<"$var"
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" />

Только отметить, проанализировать структурированные данные как xml, необходимо использовать инструмент, который понимает структуру, например. xmlstarlet.


Ответьте на отредактированный вопрос:

Можно соответствовать точной подстроке в запуске и конце в заменяющем использовании \0 отсылать целое соответствие, помещая желаемые заменяющие подстроки вокруг:

sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/'

Пример:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/' <<<"$var"                     
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>
2
ответ дан 2 December 2019 в 03:31

Другие вопросы по тегам:

Похожие вопросы: