我有一个像这样开始的文件:
[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
IIRC -i开关是对原始sed的扩展,因此可能在不同的版本中稍有不同。 与GNU sed不同, BSD sed要求您在使用-i开关时明确使用-e开关来表示您的命令。
使用:
sed -i -e "s#$search#$replace#" $file
正如已经暗示你的错误信息。
编写真正可移植的脚本是一个PITA,当这样的细节反对你。