我正在编写一个sed
脚本,试图对包含URL和IP地址等敏感信息的一堆XML进行一些修改。
我知道ERE(又名扩展正则表达式)不实现BRE反向引用,例如\(...\)
。
由于ERE提供了有用的快捷方式(?,+)
以及许多其他好处,有没有办法在替换模式中使用左侧re的第n 子匹配是sed
?
这个(使用BRE)的最小例子可能是:
sed -e 's|\(www[0-9]*\.\)[a-zA-Z0-9._]*\(\.domain\.com[a-zA-Z0-9._/]*\)|\1subtituted_text.\2|g' <large.xml >filtered.xml
假设XML包含内容
<name>www12.subdomain2.subdomain1.subdomain0.domain.com/ssl/ca-crt</name>
我想将其转换为:
<name>www12.substituted_text.domain.com/ssl/ca-crt</name>
答案 0 :(得分:2)
BRE中的反向引用:\(pattern\)
生成子模式并使用\n
进行访问
ERE中的反向引用:(pattern)
使用\n
您在ERE中的sed命令:
sed -r 's#(www[0-9]*\.)[a-zA-Z0-9._]*(\.domain\.com[a-zA-Z0-9._/]*)#\1subtituted_text.\2#g'