2017-12-13 15 views
1

をxmlファイルのDOCTYPE行を変更することができる: -ない私は以下のような名前alphabet.xmlとxmlファイルを持っているbashで

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE models SYSTEM "mp.dtd"> 
<models> 
    <class name="ABC"> 
     <attribute name="a"/> 
     <attribute name="b"/> 
     <attribute name="c"/> 
    </class> 
    <class name="DEF"> 
     <attribute name="d"/> 
     <attribute name="e"/> 
     <attribute name="f"/> 
    </class> 
    <class name="GHI"> 
     <attribute name="g"/> 
     <attribute name="h"/> 
     <attribute name="i"/> 
    </class> 
    <class name="JKL"> 
     <attribute name="j"/> 
     <attribute name="k"/> 
     <attribute name="l"/> 
    </class> 
</models> 

は、今私は<!DOCTYPE models SYSTEM "/opt/nms_cif_mp/dat/mp.dtd">

でalphabet.xmlの <!DOCTYPE models SYSTEM "mp.dtd">文字列を置換します

コード私は以下を使用しています。しかし、このコードでは、上記の特定の文字列の置換は起こっていません。

cd /home/abinash/Desktop/MyFolder/ 
file_name="alphabet.xml" 
from_dtd='<!DOCTYPE models SYSTEM "mp.dtd">' 
to_dtd='<!DOCTYPE models SYSTEM "/opt/nms_cif_mp/dat/mp.dtd">' 
#Basically using awk I am trying to replace the string and then write it into tmp.xml . 
#After that I am copying the content of tmp.xml into alphabet.xml . 
awk '{ if (NR == 2) print "<!DOCTYPE models SYSTEM "/opt/ericsson /nms_cif_mp/dat/mp.dtd""; else print $0}' /home/abinash/Desktop/MyFolder /$file_name > /home/abinash/Desktop/MyFolder/tmp.xml 
cp /home/abinash/Desktop/MyFolder/tmp.xml /home/abinash/Desktop/MyFolder /$file_name 

注:私は、任意の単語と<!DOCTYPE models SYSTEM "mp.dtd">を交換する場合は、上記のコードのロジックは動作します(単語ハローで試してみました)ではなく、<!DOCTYPE models SYSTEM "/opt/nms_cif_mp/dat/mp.dtd">

とここに必要な特別な処理はありますか?

答えて

1

問題は、Awkコマンド内での引用によるものです。 -vオプションがあなたのAwkでサポートされている場合 あなたは、awkの変数に$to_dtdの値を渡すことによって、このロットを簡素化することができます。迅速な対応のための

awk -vdtd="$to_dtd" 'NR == 2 { print dtd } NR != 2 { print }' /home/abinash/Desktop/MyFolder /$file_name > /home/abinash/Desktop/MyFolder/tmp.xml 
+0

ヤーノシュ...それは今働いている...ありがとう。 – Abinash

関連する問題