TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #297 1.27K
Рекурсивная замена в файлах через sed без temp-файлов

Иногда нужно заменить строку или шаблон во всех файлах директории, но без создания временных файлов, лишнего мусора и *.bak. Обычно sed -i решает задачу, но как это сделать рекурсивно, да еще и аккуратно?

▪️ Один-liner: заменить http:// на https:// во всех .conf файлах


find . -type f -name "*.conf" -exec sed -i 's|http://|https://|g' {} +


-i делает замену на месте.
{} - текущий файл, + - запускает sed с пакетами файлов (быстрее, чем по одному).

❓ А если sed без -i (например, BSD/macOS)? Тогда делаем замену через perl:


find . -type f -name "*.conf" -exec perl -pi -e 's|http://|https://|g' {} +


Работает без временных файлов и .bak.

▪️ Хочешь dry-run? Добавь -print в find и убери -i:


find . -type f -name "*.conf" -print -exec grep -H 'http://' {} \;


▪️ Рекурсивная замена с маской и шаблоном


PATTERN="TODO"
REPLACE="Done"

find ./src -type f -name "*.txt" -exec sed -i "s/${PATTERN}/${REPLACE}/g" {} +


⭐️ Можно применять для:

📍 массовая правка конфигов;
📍 удаление старых ссылок;
📍 миграция путей или параметров;
📍 зачистка TODO/DEBUG в исходниках.

BashTex 📱 #bash #utils
  • 👍 11
More from @bash_tex
  1. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  2. Oct 9, 2026BashTex 📱 #мем
  3. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  4. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  5. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  6. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →