私の入力ファイルは次のとおりです
入力ファイル
<ReconSummary>
<entryName>Total Deep</entryName>
<Code>777</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
<ReconSummary>
<entryName>Total Saurav</entryName>
<Code>666</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
私のコードは次のとおりです
LineNum=`grep -n "Deep" deep.xml | cut -d: -f 1 | awk -F '[\t]' '{$NF = $NF -1;}1'`
sed -i "/$LineNum/s/^/<!--/" deep.xml
必要なものは次のとおりです。 - LineNum変数で取得した行番号に移動し、xmlタグの前に<!--を追加したいと思います。このように、私の出力例は次のようになります。
<!--<ReconSummary>
<entryName>Total Deep</entryName>
<Code>777</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
<ReconSummary>
<entryName>Total Saurav</entryName>
<Code>666</Code>
<License>L</License>
<Tran>H20</Tran>
<job>1234</job>
</ReconSummary>
できません。私のコードで何が間違っているのか教えてくれる人はいますか?
答え1
本質的に、XML解析ツールを使用してXMLファイルに間違った方法でアクセスしています。
ただし、この特定の質問の場合:ファイル行を逆にして、必要なプレフィックスを行に追加します。後ろに「深く」して出力を再び反転します。
tac file.xml | sed '/Deep/ {n; s/^/<!--/}' | tac
結果を元のファイルに戻すには、次のいずれかを実行します。
sudo apt install moreutils
tac file.xml | ... | sponge file.xml
または
tmp=$(mktemp)
tac file.xml | ... > "$tmp" && mv "$tmp" file.xml
「深い」段落にコメントしたい場合は、以下を使用してください。真珠
perl -00 -lpe '$_ = "<!-- $_ -->" if /Deep/' file.xml