#!/bin/bash
FILE="$1"
PATTERN="$2"
PATH1=$3
PATH2=$4
LINES=$(grep -n -A4 "${PATTERN}" ${FILE} | grep FCGI | cut -d "-" -f1)
for line in ${LINES}
do
sed -i "${line}s|${PATH1}|${PATH2}|" ${FILE}
done
cat ${FILE}
1. Получаешь номера строк которые нужно заменить. Для этого используешь grep с параметром -A4 который означает выводить последующие 4 строчки относительно совпадения. У этих строчек благодаря параметру -n выведутся номера, cut оставит только их.
2. Для каждого найденного номера строки делается замена
Скрипт вызывать так соответственно так:
./toster.sh test '<Directory /var/www/123.ru>' 'FCGIWrapper /var/www/php-bin/test/php' 'FCGIWrapper /var/www/php-bin/test/php5'
скрипт <файл> <начало блока> <что заменить> <на что заменить>
Перед прогонкой советую сохранить оригинальный файл, к примеру добавить в цикл перед sed
cp ${FILE} ${FILE}.bk