2016-04-18 157 views
0

我正在嘗試編寫一個shell腳本來在Ubuntu 14.04上找到替換這行代碼的代碼。SED用單引號和雙引號替換內容

//Code before script runs 
/*define('FS_METHOD','direct');*/ 

//Code after script runs 
define('FS_METHOD','direct'); 

sudo sed -i "[email protected]/*define('FS_METHOD','direct');*/@define('FS_METHOD,'direct');@g" /home/example/example.txt 

運行此行代碼後,我沒有得到任何錯誤,但它不會刪除/ * * /我相信這是因爲單引號的。我試圖用反斜槓轉義它們,但它也不起作用。任何人有任何想法如何讓這個工作?

回答

2

沒有,問題是*是RE metacharcter所以你需要逃避它有它處理從字面上:

$ sed "[email protected]/\*define('FS_METHOD','direct');\*/@define('FS_METHOD,'direct');@g" file 
define('FS_METHOD,'direct'); 

或更簡潔:

$ sed "[email protected]/\*\(define('FS_METHOD','direct');\)\*/@\[email protected]" file 
define('FS_METHOD','direct'); 
+0

我嘗試這兩種方法並沒有爲我工作。我在OSX和Ubuntu的終端上運行了兩條線,都沒有工作。我不能想到我會做錯什麼。 – Drew

+0

也許你需要雙重逃避一切,因爲你在sudo下運行? idk ...當你不在sudo下運行時,它的行爲是否符合要求?如果不包含'-i'選項(消除文件權限問題),它是否會產生預期的輸出? –

+0

試圖使用sudo,而不是使用它,它給出了相同的結果。儘管如果刪除單引號,它確實有效。 – Drew