У меня есть файл, который начинается так:
[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
и, вероятно, поэтому в разных версиях реализован немного по-разному. BSD sed
в отличие GNU sed
требует, чтобы вы явно использовали -e
переключатель для обозначения вашей команды при использовании -i
переключатель.
Использование:
sed -i
-e
"s#$search#$replace#" $file
как уже было указано в вашем сообщении об ошибке.
Написание действительно переносимых сценариев - это PITA, когда подобные детали сговариваются против вас.