2016-08-23 26 views
2

如果有人可以幫助請,我想使用正則表達式和捕捉組做一個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// 

我試圖反斜線括號以及但是它不工作。請協助....因爲它現在正在傷害我的頭...

回答

3

當在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,這與您的大致相同!不管怎麼說,還是要謝謝你! –