• Bash: Замена совпадений между определенными строками?

    3vi1_0n3
    @3vi1_0n3
    На самом деле можно еще проще:
    sed -i file -re "/Directory/,/\/Directory/ {s/(test\/php)/\15/}"
    Ответ написан
    Комментировать
  • Bash: Замена совпадений между определенными строками?

    #!/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
    Ответ написан
    1 комментарий