Sed regex命令替换

Ior*_*ori 3 regex bash sed

在我的php.ini中

error_reporting = E_ALL
Run Code Online (Sandbox Code Playgroud)

我想把它改回来

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
Run Code Online (Sandbox Code Playgroud)

使用sed命令

sed -i "s/^error_reporting = .*/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/" /etc/php5/apache2/php.ini
Run Code Online (Sandbox Code Playgroud)

我得到了不同的结果:

error_reporting = E_ALL error_reporting = E_ALL ~E_DEPRECATED error_reporting = E_ALL ~E_STRICT
Run Code Online (Sandbox Code Playgroud)

但它应该是

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
Run Code Online (Sandbox Code Playgroud)

顺便说一下,sed命令是一个bash脚本.

Win*_*ute 11

&在sed s命令的替换子句中有特殊含义; 它被匹配的字符串替换.你必须逃脱它:

sed -i 's/^error_reporting = .*/error_reporting = E_ALL \& ~E_DEPRECATED \& ~E_STRICT/' /etc/php5/apache2/php.ini
Run Code Online (Sandbox Code Playgroud)