SED 无法处理复杂的字符串

SED 无法处理复杂的字符串

我有一个文件,其开头如下:

[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php5-fpm.log

并想更换

error_log = /var/log/php5-fpm.log

error_log = /var/log/php-fpm/error.log

我想为此使用一个脚本并执行以下操作:

search='error_log = /var/log/php5-fpm.log'
replace='error_log = /var/log/php-fpm/error.log'
for file in `find -name 'php-fpm.conf'`; do
  grep "$search" $file &> /dev/null
  if [ $? -ne 0 ]; then
    echo "Search string not found in $file!"
  else
    sed -i "s#$search#$replace#" $file
  fi  
done

这会引发以下错误:

sed: -e expression #1, char 0: no previous regular expression
sed: -e expression #1, char 0: no previous regular expression

答案1

IIRC 该-i开关是原始开关的扩展sed,因此在不同版本中的实现可能略有不同。 北达科他州sed不像GNUsed要求您-e在使用开关时明确使用开关来表示您的命令-i

使用:

sed -i-e"s#$search#$replace#" $file

正如您的错误消息所暗示的那样。

当诸如此类的细节对你不利时,编写真正可移植的脚本是一件非常困难的事情。

相关内容