【发布时间】:2016-02-15 09:18:08
【问题描述】:
我有两个文件。
文件一是 TXT,包含字符串,每行一个。
文件 2 是一个 XML,其中包含多个条目,如下所示:
<data name="Btn:Cancel" xml:space="preserve">
<value>Cancel</value>
<comment>Original English: Cancel</comment>
</data>
我需要用文件一中的相应字符串替换 XML 文件中的 VALUE 值:因此,第一次出现的 VALUE 将被文件一中的第一行替换,第二次出现在 XML 文件中的 VALUE 将被文件一中的第二行替换,依此类推。
我已经尝试了几件事(基本上使用 sed),我的最后一个镜头是
while read line
do
echo $count
echo $line
sed "s_<value>.*</value>_<value>$line</value>_$count" file.xml > results.xml
((count++))
done < file.txt
但它对 results.xml 文件没有任何作用:(
【问题讨论】:
-
在您的脚本中将计数初始化为 1,但我认为这不会起作用,因为 sed 逐行工作。每行最多有一个值。您必须首先将整个 xml 压缩成一行。你能用一行xml试试吗?并将
.*更改为.*?。也可以按照 napnac 的建议使用-i。 -
我试过这个:tr '\n' '^' temp.txt 但也没有乐趣......
-
@EdMorton 确实,两者看起来都一样,我还没有看到这个。但是,我知道另一个人想要一遍又一遍地替换相同的 XML,而我有一个 XML 文件,其中包含很多我想要替换的数据。如果我错了,请纠正我。
-
你错了。您的问题与另一个具有完全相同解决方案的问题完全相同 - 将 TXT 文件读入数组,然后使用递增索引将 XML 文件中的每个目标字符串替换为数组内容。我在这里发布了我对该问题的回答,并根据您的具体情况进行了调整。