使用扩展正则表达式重新引用Sed

时间:2015-12-23 10:28:53

标签: regex bash url sed

我正在编写一个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>

1 个答案:

答案 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'