哈罗,我研究了很多,但从来没有找到一个适合我需要的解决方案。
我必须替换原始的xml行:
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>使用修改后的xml行:
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>我试着做两个变量。下面是我的脚本:
#!/bin/bash
MOD=`more /aplicaciones/users/t682213/alvaro/mod`
XML=`more /aplicaciones/users/t682213/alvaro/xml`
sed "s#$XML#$MOD#g" test2但我得到的东西是这样的:
/aplicaciones/users/t682213/alvaro$ sed "s#$XML#$MOD#g" test2
<access-log pattern="%h %l %u %t <access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>quot;%r<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>quot; %s %b <access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>quot;%{i,Referer}<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>quot; <access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>quot;%{i,User-Agent}<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>quot; %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>我需要帮助,我想用另一个非常复杂的字符串替换一个非常复杂的字符串。
发布于 2019-02-03 03:20:02
丹·D是对的。使用正则表达式操作XML是一种邪恶的技巧,在某些情况下是可行的,但它很快就会成为维护人员的噩梦。然而,如果您确实确信由于某些原因(比如没有可用的XML解析器),您只能使用sed来完成该任务,我将为您的问题提供一个答案(参考另一个SO问题)。
您需要对文件中的字符串进行转义。在这种情况下,问题出现在替换字符串中的字符&,这意味着将整个匹配放在这里。有关如何避开搜索和替换模式的建议,请参阅Escape a string for a sed replace pattern。
发布于 2019-02-04 00:03:34
我找到解决方案了
正如Michael提到的,问题出在&,所以我在两个文本变量( MOD和XML)中避开了&。
这是我的结果,(如果你在sed中发现正则表达式有问题,比如/,"",&,)
首先,我创建了两个文本,一个是我想要替换的xml字符串( xml ),另一个是我想替换为(mod)的xml字符串。
下面是两个文本:
转义xml(带有&:\&)
<access-log pattern="%h %l %u %t \"%r\" %s %b \"%{i,Referer}\" \"%{i,User-Agent}\" %T " prefix="access_${jboss.server.name}" suffix=".log"/>修改(使用转义:\&) (&E)
<access-log pattern="%h %l %u %t \"%r\" %s %b \"%{i,Referer}\" \"%{i,User-Agent}\" %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>我创建了一个名为test2的测试txt来模拟我想在其中工作的完整xml。
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T " prefix="access_${jboss.server.name}" suffix=".log"/>
HOLA
ADIOS最后,创建一个使用sed:进行更改的shell脚本(使用#代替/和“”代替‘’非常重要)
#!/bin/bash
MOD=`more /aplicaciones/users/t682213/alvaro/mod`
XML=`more /aplicaciones/users/t682213/alvaro/xml`
sed "s#$XML#$MOD#" test2 >> test3 最后,脚本生成一个经过正确修改的test3文本:
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %T %{i,Proxy-Remote-User}" prefix="access_${jboss.server.name}" suffix=".log"/>
HOLA
ADIOS https://stackoverflow.com/questions/54496574
复制相似问题