SED用单引号和双引号替换内容

时间:2016-04-18 16:53:50

标签: shell ubuntu sed

我正在尝试编写一个shell脚本来在Ubuntu 14.04上找到替换这行代码。

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

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

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

运行这行代码后,我没有收到任何错误,但它没有删除/ * * /我相信这是因为单引号。我试过用反斜杠来逃避它们,但它也不起作用。任何人都知道如何让这个工作?

1 个答案:

答案 0 :(得分:2)

不,问题是*是一个RE metacharcter,所以你需要逃避它以便按字面意思对待它:

$ sed "s@/\*define('FS_METHOD','direct');\*/@define('FS_METHOD,'direct');@g" file
define('FS_METHOD,'direct');

或更简洁:

$ sed "s@/\*\(define('FS_METHOD','direct');\)\*/@\1@" file
define('FS_METHOD','direct');