我无法让sed匹配(并替换)包含“&”符号的整行。它似乎一直匹配到第一个“&”号,然后停止匹配。并且替换字符串仅替换该部分,而不替换整个行。
sed -i 's/^error_reporting = .*/error_reporting = E_ALL \& \~E_DEPRECATED \& \~E_STRICT \& \~E_NOTICE/' /etc/php.ini
替换是正确的,但转义符是转义符。但是不会替换整个行,而只是替换第一个现有的“&”号之前的部分。我该如何指定sed以匹配包括与号在内的所有内容?
更新:我发现了问题所在。我是从javascript脚本中调用sed命令的,它在将字符传递给sed命令之前对其进行了转义。两次转义字符串可解决此问题。
答案 0 :(得分:1)
也无法在MacOS上使用GNU sed或默认BSD sed复制
$ echo 'error_reporting = a & ~b & c' | gsed 's/^error_reporting = .*/error_reporting = E_ALL \& \~E_DEPRECATED \& \~E_STRICT \& \~E_NOTICE/'
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE