J'ai le texte suivant dans File.XML:
<http-listener name="default" socket-binding="http" max-post-size="1073741824" />
Je voudrais remplacer cela par
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>
J'ai essayé
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
Mais j'ai eu une erreur
Insérez le bloc requis (<!--
) au début (^
):
sed 's/^/<!-- /'
Exemple:
% 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" />
Notez que pour analyser des données structurées telles que xml
, vous devez utiliser un outil qui en comprend la structure, par exemple. xmlstarlet
.
Réponse à la question modifiée:
Vous pouvez faire correspondre des sous-chaînes précises au début et à la fin. Lors du remplacement, utilisez \0
pour faire référence à la correspondance complète en mettant les sous-chaînes de remplacement souhaitées autour:
sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/'
Exemple:
% 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" /> -->>