【问题标题】:SED replacing content with single and double quotesSED 用单引号和双引号替换内容
【发布时间】:2016-08-10 12:59:14
【问题描述】:

我正在尝试编写一个 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

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

【问题讨论】:

    标签: shell ubuntu sed


    【解决方案1】:

    不,问题在于* 是一个 RE 元字符,因此您需要对其进行转义才能对其进行字面处理:

    $ 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');
    

    【讨论】:

    • 我尝试了这两种方法,但都没有为我工作。我在 OSX 和 ubuntu 上的终端上运行了两条线路,但都没有工作。我想不出我会做错什么。
    • 也许您需要双重转义所有内容,因为您在 sudo 下运行? idk ...当您不在 sudo 下运行它时,它的行为是否符合预期?当您不包含 -i 选项时,它是否会产生预期的输出(消除文件权限问题)。
    • 尝试使用 sudo 但不使用它,它给出了相同的结果。虽然如果我删除单引号它确实有效。
    • 不知道为什么它不能正常工作,但现在可以正常工作:sed -i "s@/\*define('FS_METHOD','direct');\*/@define('FS_METHOD','direct');@g" file.txt
    猜你喜欢
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2011-06-19
    • 2018-11-18
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多