Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
IT и технологии · 16 февраля 2026 г.
📌 Рекурсивная массовая замена текста во всех файлах 🔍✏️ — 16 февраля 2026 г. в 10:27:58.885
📌 Рекурсивная массовая замена текста во всех файлах 🔍✏️ Иногда нужно за пару секунд заменить одну строку или слово сразу во множестве файлов в каталоге и его поддиректориях. #!/usr/bin/env bash # автор: https://t.me/bash_srv # Проверка аргументов if [ "$#" -ne 3 ]; then echo "Использование: $0 <старый_текст> <новый_текст> <путь_к_директории>" exit 1 fi OLD="$1" NEW="$2" DIR="$3" EXT="*" # можно указать, например, "*.conf" или "*.txt" # Находим файлы и делаем замену с созданием резервных .bak-файлов find "$DIR" -type f -name "$EXT" -print0 \ | xargs -0 sed -i.bak "s/${OLD}/${NEW}/g" # Удаляем .bak, если они больше не нужны # find "$DIR" -type f -name "*.bak" -delete echo "Заменено '$OLD' на '$NEW' во всех файлах под '$DIR'." 🔧 Как использовать 1. Сохраните скрипт, например, как /usr/local/bin/bulk-replace.sh 2. Дайте права на исполнение: chmod +x /usr/local/bin/bulk-replace.sh 3. Запустите, указав искомую строку, замену и каталог: /usr/local/bin/bulk-replace.sh "foo" "bar" /etc/myapp 💡 Советы и примочки 🟢 По умолчанию скрипт обрабатывает все файлы (EXT="*"). Для конкретных типов (конфиги, скрипты) замените на "*.conf" или "*.sh". 🟢 Флаг -i.bak создаёт резервную копию каждого файла с расширением .bak. Если вы уверены, что бэкапы не нужны, после замены раскомментируйте строку удаления. 🟢 При сложных шаблонах (точки, слэши) вместо прямых слэшей s/old/new/g можно использовать другой разделитель, например s|old|new|g. 🟢 Для чувствительных к регистру замен добавьте флаг I (GNU sed`): `s/${OLD}/${NEW}/gI. 🟢 Если нужно увидеть, в каких файлах были изменения, перед sed вставьте -exec grep -l "${OLD}" {} \; или используйте grep -R --include="$EXT" "${OLD}" "$DIR". 👉 @bash_srv

