sed - 为什么这不起作用?

sed - 为什么这不起作用?

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

这是我的情况:

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

;date.timezone =

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

date.timezone = "America/Mexico_City"

我尝试使用的命令是这样的:

sed -i '/^;date\.timezone[[:space:]]=.*$/date.timezone = "America/Mexico_City"' php.ini

但我明白了:

sed: -e expression #1, char 35: extra characters after command

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

sed -i '/^;date\.timezone[[:space:]]=.*$/d' php.ini

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

我对 sed 真的很陌生,非常感谢任何帮助。

谢谢

答案1

你正在尝试s将一种模式替换为另一种模式,因此您需要使用 seds命令,其形式为

's/pattern/replacement/'

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

sed 's/^;date\.timezone[[:space:]]=.*$/date.timezone = "America\/Mexico_City"/'

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

sed 's#^;date\.timezone[[:space:]]=.*$#date.timezone = "America/Mexico_City"#'

相关内容