sed - 为什么这不起作用?

Mik*_*zco 1 sed

我只是想使用 bash 脚本替换 php.ini 文件中的设置。

这是我的情况:

我有一个非常具体的设置,默认设置是:

;date.timezone =
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试将其替换sed为:

date.timezone = "America/Mexico_City"
Run Code Online (Sandbox Code Playgroud)

我尝试使用的命令是:

sed -i '/^;date\.timezone[[:space:]]=.*$/date.timezone = "America/Mexico_City"' php.ini
Run Code Online (Sandbox Code Playgroud)

但我明白了:

sed: -e expression #1, char 35: extra characters after command
Run Code Online (Sandbox Code Playgroud)

我真的不知道为什么,但如果我只留下一个字符,它就可以工作(不是预期的方式,但不会返回错误)。例子:

sed -i '/^;date\.timezone[[:space:]]=.*$/d' php.ini
Run Code Online (Sandbox Code Playgroud)

这只是删除了该行 ;date.timezone =

我对 sed 真的很陌生,我真的很感激任何帮助。

谢谢

ste*_*ver 6

您正在尝试小号另一个ubstitute一个模式,所以你需要使用sed的s命令,形式

's/pattern/replacement/'
Run Code Online (Sandbox Code Playgroud)

此外,您需要转义/模式或替换字符串中的任何字符(在您的情况下"America\/Mexico_City")。所以

sed 's/^;date\.timezone[[:space:]]=.*$/date.timezone = "America\/Mexico_City"/'
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过使用不同的模式替换分隔符来避免转义斜杠,s#pattern#replacement#例如

sed 's#^;date\.timezone[[:space:]]=.*$#date.timezone = "America/Mexico_City"#'
Run Code Online (Sandbox Code Playgroud)