XMLファイルがあります
検索する必要がある行は次のとおりです。
SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
この検索された値は、次の変数の値に置き換える必要があります。また、別のファイルに保存することもできます。
REPLACE='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>
'
SED や AWK などの Unix コマンドを使用してこれを実行するにはどうすればよいですか? (ここでは、SEARCH を REPLACE に置き換える必要があります。
答え1
はい、sed で実行できますが、Jens に同意します。タグの検索と置換には、python + lxml ライブラリなどの適切なツールを使用することをお勧めします。
答え2
私が知る限り、エスケープする文字は次のとおりです。
awk '/<\?xml version="1.0" encoding="UTF-8" standalone="no"\?><SSC>/ {print "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>"}' <<< '<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
- 検索フィールドで、? 文字を \? でエスケープします。
- REPLACEフィールドで、「\」で文字をエスケープします
または、変数を使用する必要がある場合は、検索フィールドでも " をエスケープし、文字を 2 回エスケープします。1 回は変数に格納し、2 回はエコーします。
SEARCH_escaped=`sed -e 's/\?/\\\?/g' -e 's/\"/\\\"/g' <<< $SEARCH`
REPLACE_escaped=`sed 's/\"/\\\"/g' <<< $REPLACE`
awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH