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

标签 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

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

最佳答案

不,问题是 *是一个 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');

关于shell - SED 用单引号和双引号替换内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699911/

相关文章:

unix - 将进程的生命周期与启动它的 shell 联系起来

bash - 如何在 Bash 中用定界符拆分字符串?

linux - 如何在 3 行中生成随机数 - Linux Shell 脚本

ubuntu - 挂载后 Docker 主机卷为空

postgresql - 无法连接到 Tryton 数据库

bash - PostgreSQL - pg_config -bash : pg_config: command not found

c++ - 如何将 C++ 预处理器应用于 Ubuntu 上的 C++ 头文件

awk - 拆分一行的第二列以使用 bash oneliner 创建多行

windows - GNU sed - 查找或替换空格或新行。为什么这不起作用? v3.02 与 v4.2

linux - curl, sed//有人知道从网络和进程中提取信息的更好方法吗?