桑达追加正则表达式捕获组

问题描述:

如果有人可以帮助请,我想使用正则表达式和捕捉组做一个sed追加,但它不是完全的工作:桑达追加正则表达式捕获组

echo "#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/" | sed -re '/#baseurl=http:\/\/mirror.centos.org(.*)/a baseurl=https:\/\/10.10.10.10\ \1' 
#baseurl=http://mirror.centos.org/centos//contrib// 
baseurl=https://10.10.10.10 1 

在它只是给文字的那一刻值1而不是捕获组。

它应该给:

#baseurl=http://mirror.centos.org/centos//contrib// 
baseurl=https://10.10.10.10/centos//contrib// 

我试图反斜线括号以及但是它不工作。请协助....因为它现在正在伤害我的头...

当在sed中使用s(替代)命令时,您只能捕获反向参考。

这应该工作:

s="#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/"  
sed -r 's~#baseurl=http://mirror\.centos\.org(.*)~&\nbaseurl=https://10.10.10.10\1~' <<< "$s" 

#baseurl=http://mirror.centos.org/centos//contrib// 
baseurl=https://10.10.10.10/centos//contrib// 
+1

非常好做(我+前为其+1)。为什么这种后向引用只能用于替代模式?我找不到这方面的参考。 – fedorqui

+1

我相信除了替代模式只有'/ search /'允许使用正则表达式和组,并且因为没有替换,所以我们不能使用反向引用。 – anubhava

+1

谢谢,我做了sed与s并且做了两个捕获小组(...(。*))并且打印了\ 1 \ nxyz \ 2,这与您的大致相同!不管怎么说,还是要谢谢你! –