Regex Sed正则表达式命令替换

Regex Sed正则表达式命令替换,regex,bash,sed,Regex,Bash,Sed,在我的php.ini中 error_reporting = E_ALL 我想把它换回去 error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT 使用sed命令 sed -i "s/^error_reporting = .*/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/" /etc/php5/apache2/php.ini 我得到了一个不同的结果: er

在我的php.ini中

error_reporting = E_ALL
我想把它换回去

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
使用sed命令

sed -i "s/^error_reporting = .*/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/" /etc/php5/apache2/php.ini
我得到了一个不同的结果:

error_reporting = E_ALL error_reporting = E_ALL ~E_DEPRECATED error_reporting = E_ALL ~E_STRICT
但应该是这样

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

顺便说一句,sed命令在bash脚本中。

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

sed -i 's/^error_reporting = .*/error_reporting = E_ALL \& ~E_DEPRECATED \& ~E_STRICT/' /etc/php5/apache2/php.ini