2014-11-16 59 views
-1

我想在與外殼和正則表達式的線來替換的字符串。正則表達式中的sed用於搜索與替換(無效引用)

例如,在文件configuration.php我想和OK_REPLACED更換TO_REPLACE

public $user = 'TO_REPLACE'; 

我試過這個命令:

cd ~/public_html; sed -i "s/^\public $user = *'[^']*'/\1OK_REPLACED'/g" configuration.php 

,但我得到這個錯誤

sed: -e expression #1, char 39: invalid reference \1 on `s' command's RHS 

我也試過這個,但沒有任何東西

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php 

回答

0

您需要「組」將括號放在需要替換「\ 1」的表達式部分的周圍:在此情況下,第一個「'」之前的所有內容。

+0

你好謝謝 可否請你讓我一個例子嗎? 我嘗試了幾種可能性,但沒有什麼:( – amorino

+0

我會做這樣的事情:sed的 「S/\(PUBLIC \ $ USER = '\)[^'] * \(\)/ \ 1OK_REPLACED \ 2/g的」 – shooper

1

在更換\1替換任何匹配的第一個捕獲組在正則表達式,但你有沒有捕捉組。您需要將捕獲組放在原始行的要複製到替換部分的部分周圍。

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php 

如果您要更換的TO_REPLACE所有出現,你可以這樣做:

sed -i 's/TO_REPLACE/OK_REPLACED/g' configuration.php 
+0

你好非常感謝你 現在有了新的命令,我得到:'sed的:-e表達式#1,焦炭44:關於單曲命令的RHS' – amorino

+0

無效引用\ 2,我不明白爲什麼'\ 1'得到在'public'部分,和'\ 2'得到的一切配套'= *「[^」] *'' – Barmar

+0

你好, 可以請你更改代碼,只要你喜歡 我想只是爲了取代''TO_REPLACE' OK_REPLACED' – amorino

1

我想你的括號必須平衡。你的第一個以前綴爲反斜槓,但第二個不是。試試這個:

sed -i "s/^\(public \$user = *'\)[^']*'/\1OK_REPLACED'/g" configuration.php 

或本:

sed -r -i "s/^(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php 
+0

這應該解決您未定義的參考問題。然而,我不檢查其他任何東西。(如果發生進一步問題並且無法解決問題,請發佈它。) –