从其他文件中的textline替换文件中的文本

时间:2011-11-03 04:19:47

标签: xml regex linux replace

这是我的问题,即时通讯使用ubuntu,我试图替换xml文件中的文本..来自我所做的所有更改的txt,一个例子

在replace.txt文件中我有这个

    nameofsearch  | nameforreplace
    nameofsearch1 | nameforreplace1 
    nameofsearch2 | nameforreplace2 

这是软件用于搜索和替换的格式

在xml文件中,我有nameofsearch

这是通过软件在.net上完成的,我不能在linux上运行,所以这是我的问题,我怎么能这样做,使用bash,或任何其他类似的东西。

谢谢,塞巴斯蒂安。

2 个答案:

答案 0 :(得分:0)

您可能尝试使用Mono在Linux上运行.Net应用程序。

您可以使用AWK进行替换,或Sed,或者由于您的数据是XML,请使用XSLT

我不明白您是否要替换所有正在搜索的名称,或者只替换找到的第一个名字。

replace.txt文件或您正在处理的XML文件是巨大的吗?

答案 1 :(得分:0)

您要查找的工具是sed。如果要在file1中将str1替换为str2并将结果保存在file2中,请运行:

sed s/str1/str2 < file1 > file2

你需要转义一些特殊字符,因为sed将str1解析为正则表达式。

在您的情况下,需要两个步骤。第一步将replace.txt转换为sed脚本文件,我称之为replace.sed

sed "s/\s*|\s*/\//g"  "replace.txt" | sed "s/\w*\/\w*/s\/&\/g/" > replace.sed

第一个sed调用将管道(和周围的空格)转换为斜杠| - &gt; /。第二个调用使用sed语法围绕搜索/替换字符串。 replace.sed应该看起来像

s/nameofsearch/nameforreplace/
s/nameofsearch1/nameforreplace1/
s/nameofsearch2/nameforreplace2/

第二步是在xml文件上使用给定的脚本文件执行sed。

sed -f replace.sed test.xml > replaced.xml