[英]How to replace value of xml attributes matching a regex in bash?
我想用bash中的文件替换与正则表达式匹配的XML属性的值。
<Resource name="MailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="localhost" mail.smtp.user="foo" mail.smtp.passwd="12345678"
mail.pop3.host="localhost" mail.pop3.user="foo" mail.pop3.passwd="12345678"/>
应该转化为
<Resource name="MailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="***" mail.smtp.user="foo" mail.smtp.passwd="***"
mail.pop3.host="***" mail.pop3.user="foo" mail.pop3.passwd="***"/>
使用sed或awk应该可以。
我将有以下sed命令:
sed -E 's@(mail[.][^.]+[.])(host|passwd)="[^"]*"@\1\2="***"@g' file
输出:
<Resource name="MailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="***" mail.smtp.user="foo" mail.smtp.passwd="***"
mail.pop3.host="***" mail.pop3.user="foo" mail.pop3.passwd="***"/>
您可以在sed中添加-i
选项以直接修改文件。
如果您的XML文件称为“ test.xml”,则可以:
cat test.xml | sed 's/host="[^"]*/host="***/g' | sed 's/passwd="[^"]*/passwd="***/g'
如果要从其他位置(例如HTTP连接或其他位置)读取文件,则可以修改管道的第一个命令。
使用awk
awk -F\" '/host/ {$2=$6="***"}1' OFS=\" file
<Resource name="MailSession" auth="Container" type="javax.mail.Session"
mail.smtp.host="***" mail.smtp.user="foo" mail.smtp.passwd="***"
mail.pop3.host="***" mail.pop3.user="foo" mail.pop3.passwd="***"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.