web-dev-qa-db-ja.com

sedを使用してxmlファイルの行を置き換える方法

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
Picasu27

開始時に必要なチャンク(<!--)を挿入します(^):

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
heemayl