Skip to main content

Замена строки в файле при нахождении

Заменить одну строку (подстроку) в файле другой строкой (подстрокой) можно командой:

sed -i "s/abc/xyz/g" "/path/to/file.php"

В данном случае выражение abc будет заменено на xyz.

Добавим предварительное условие нахождения данной строки (подстроки) в файле:

grep "abc" "/path/to/file.php" && sed -i "s/abc/xyz/g" "/path/to/file.php"

Таким образом, замена будет выполнена только при нахождении в файле строки abc.

Можно также добавить выполнение чего-либо при отсутствии строки (подстроки) «abc» в файле:

grep "abc" "/path/to/file.php" && sed -i "s/abc/xyz/g" "/path/to/file.php" || echo "Строка не найдена"

Мне это пригодилось для мониторинга изменений в конфигурационном файле WordPress и автоматической замены нужного параметра (WordPress при обновлении зачем-то вновь включает создание ревизий, поэтому пришлось мониторить значение параметра WP_POST_REVISIONS в файле default-constants.php и при значении true заменять его на false):

grep "define('WP_POST_REVISIONS', true);" "/path/to/site/wp-includes/default-constants.php" && sed -i "s/define('WP_POST_REVISIONS', true)/define('WP_POST_REVISIONS', false)/g" "/path/to/site/wp-includes/default-constants.php"

Для автоматического мониторинга я включил это задание в крон (crontab -e) на ежечасное выполнение:

@hourly grep "define('WP_POST_REVISIONS', true);" "/path/to/site/wp-includes/default-constants.php" && sed -i "s/define('WP_POST_REVISIONS', true)/define('WP_POST_REVISIONS', false)/g" "/path/to/site/wp-includes/default-constants.php"

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *