
私の入力XMLファイルは次のとおりです
XMLファイルの入力
<Formula>
<Name>Total Hate Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
私のシェルスクリプトで「Total Hate Fee」パターンを検索し、そのパターンが見つかったら、追加された特定の行とパターンが一致<!--
する-->
部分だけに注釈を付け、出力が次のように見えるようにしたいと思います。
出力XMLファイル
<Formula>
<--<Name>Total Hate Fee</Name>-->
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
誰でもこの問題を解決するのに役立ちますか?ツールを使用したくありませんxmlstartet
。代わりにシェルスクリプトを使用したい
答え1
ほぼすべて来ました。私はedコードの2行目を追加しましたが、一致する行の下に4行があるようです。
printf '%s\n' \
'g/Total Hate Fee/-1 s/^/<!--/' \
'g/Total Hate Fee/+4 s/$/-->/' \
'w newfile.xml' 'q' \
| ed -s file.xml;
答え2
awk -v pattern="$yourMatch" '
$0 ~ pattern{ $0= "<!--" $0 "-->" }1' infile
上記の文字列として使用するpattern
ために、一致する正規表現として次のように使用します。$0
pattern
awk -v string="$yourMatch" '
{ if(index($0, string)) $0= "<!--" $0 "-->" }1' infile