Використовуйте за sedдопомогою, findа неgrep
Перш за все, я б працював, findа не це grep, і це з трьох вагомих причин:
findдозволяє більш точний вибір файлу. Наприклад, grep -r string *.txtбуде видаватися файли лише в поточному каталозі; не ті, що у підкаталогах.
findпоставляється з потужним -execваріантом, який виключає потребу в цілому --null … |xargs 0конструкції.
- Параметри
-readableта -writableпараметри findне дозволять витрачати час на файли, до яких не можна отримати доступ.
Тест на захоплення
Однак, grepчи не піддається першому тестуванню, щоб побачити, що було б захоплено:
$ find . -exec grep term1 {} \;
або більш конкретно:
$ find . -type f -name '*.txt' -readable -writable -exec grep term1 {} \;
Сухий біг
Тепер приступайте до sedсухого ходу. sedВаріантом -nє синонімом --quietі pв самому кінці sedвиразу надрукує поточний простір картини.
$ find . -exec sed -n 's/term1/term2/gp' {} \;
або більш конкретно:
$ find . -type f -name '*.txt' -readable -writable -exec sed -n 's/term1/term2/gp' {} \;
Виконання
Якщо все виглядає нормально, видає остаточну команду, замінивши sedопцію -nна -iдля «на місці» і видалення pв кінці.
$ find . -exec sed -i 's/term1/term2/g' {} \;
або більш конкретно:
$ find . -type f -name '*.txt' -readable -writable -exec sed -i 's/term1/term2/g' {} \;
Більше findприкладів
Більше findприкладів можна знайти тут .