这个问题已经在这里有一个答案:
霍洛,我已经研究了很多,但从来没有找到一个解决方案,适合我的需要。
我不得不更换原始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"/>
我试图使2个变量。这里是我的脚本:
#!/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"/>
请我需要帮助,我想用另一种非常复杂的字符串替换一个非常复杂的字符串。
丹D.是正确的。使用正则表达式操作XML是一个邪恶的黑客,在某些情况下工作,但它可以迅速成为一个维持性的噩梦。不过,如果你真的相信,因为某些原因(如没有XML解析器availabel),你只需要使用SED该任务,我可以回答你的问题(引用另一个SO问题)。
你需要逃避的文件中的字符串。在这种情况下,麻烦源于替换字符串中的字符&
这意味着把整个比赛在这里。见Escape a string for a sed replace pattern关于如何逃脱的搜索和替换模式的建议。
我得到了解决
正如迈克尔·提,什么问题是和,于是我躲过了和两个文本变量,(国防部和XML)
这里是我的结果,(如果你发现在sed与正则表达式的问题,如/“”,&,试试这个)
首先,我创建XML字符串两种文本一个,我想替换(XML),并用XML字符串的其他文本,我要替换(MOD)
这里有两个文本:
XML(与和逃生:\&)
<access-log pattern="%h %l %u %t \"%r\" %s %b \"%{i,Referer}\" \"%{i,User-Agent}\" %T " prefix="access_${jboss.server.name}" suffix=".log"/>
MOD(与和逃生:\&)
<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"/>
我创建了一个测试TXT模拟德完整的XML,我想工作后,被称为TEST2
<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
最后创建一个shell脚本,使变化与sed的:(用#代替/和“”,而不是它是非常重要的“”)
#!/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