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
しかし、エラーが発生しました
開始時に必要なチャンク(<!--
)を挿入します(^
):
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" /> -->>