2016-04-18 72 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