请教 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 ……