gpt4 book ai didi

xml - 无法在 bash 中更改 xml 文件的 DOCTYPE 行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:59 25 4
gpt4 key购买 nike

我有一个名为 alphabet.xml 的 xml 文件,如下所示:-

<?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 "mp.dtd">带有 <!DOCTYPE models SYSTEM "/opt/nms_cif_mp/dat/mp.dtd"> 的 alphabet.xml 字符串

我正在使用的代码在下面。但是用这段代码替换上面的特定字符串并没有发生。

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">

这里需要特殊处理吗?

最佳答案

问题在于 Awk 命令中的引号。如果您的 Awk 支持 -v 选项,您可以通过将 $to_dtd 的值传递给 Awk 变量来简化此过程:

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

关于xml - 无法在 bash 中更改 xml 文件的 DOCTYPE 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com