技术解析

请教 sed 替换修改 xml 文件问题
0
2021-07-08 15:13:06
idczone

想用 shell 修改 solr 的配置文件



sed -e '/^$/d' -e 's/\/path\/to\/solr_home<\/env-entry-value>/\/usr\/solr\/server\/solr<\/env-entry-value>/'
还可以更简洁一点

用 sed 操作 xml 纯粹找麻烦……
写个 python 能省一半时间还不容易出错。

为什么不用 vi 呢?

你那两个去掉 comments 的有点危险,万一前后有空格就匹配不上。
另外不用分 3 条,可以用分号(;)分开: sed -e 's/foo1/bar1/;s/foo2/bar2/;s/foo3/bar3/'

的确可以用 shell 调用 python 操作,大好,谢谢!

因为要用 vagrant 自动生成集群,用 vim 就不方便了

文本能贴全不?

多谢,现在已经用 python re 搞定了
python <import re
fpath = '/usr/tomcat/webapps/solr/WEB-INF/web.xml'
rep_str = '''

solr/home
/usr/solr/server/solr
java.lang.String

'''
with open(fpath) as f: text = f.read()
text = re.sub('', rep_str, text, flags=re.DOTALL)
with open(fpath, 'wb') as f: f.write(text)
EOF




xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
metadata-complete="true"
>






SolrRequestFilter
org.apache.solr.servlet.SolrDispatchFilter


excludePatterns
/css/.+,/js/.+,/img/.+,/tpl/.+




SolrRequestFilter
/*


Zookeeper
org.apache.solr.servlet.ZookeeperInfoServlet


LoadAdminUI
org.apache.solr.servlet.LoadAdminUiServlet




RedirectOldAdminUI
org.apache.solr.servlet.RedirectServlet

destination
${context}//>



RedirectOldZookeeper
org.apache.solr.servlet.RedirectServlet

destination
${context}/zookeeper



RedirectLogging
org.apache.solr.servlet.RedirectServlet

destination
${context}//>



SolrRestApi
org.restlet.ext.servlet.ServerServlet

org.restlet.application
org.apache.solr.rest.SolrSchemaRestApi



RedirectOldAdminUI
/admin/


RedirectOldAdminUI
/admin


RedirectOldZookeeper
/zookeeper.jsp


RedirectLogging
/logging



Zookeeper
/zookeeper


LoadAdminUI
/admin.html


SolrRestApi
/schema/*


.xsl

application/xslt+xml


admin.html



用 python 就是让你别用 re ……

那咋弄啊?

python 有处理 xml 的类库、模块

sed -i -e '/^$/ {
s/^$//
}
}
}' urfile

sed 最好解决了

为什么要螳臂挡车地飞正则处理 XML ……

数据地带为您的网站提供全球顶级IDC资源