1

У меня возникли проблемы с выполнением чего-то достаточно простого. Вот как я представляю это будет работать:

find . -name *.txt -exec sed 's/oldtext/newtext/g' {} > tmp \\; mv tmp {} \;

К сожалению, я не могу собрать файл и создать дамп для себя. Но я не могу понять, как сделать дамп во временный файл, а затем сразу же mv этот файл. Я знаю \\; неправильно, но я не могу понять, как выполнить одну команду, а затем другую.

2 ответа2

0

Вы можете использовать Vim в режиме Ex:

find -name '*.txt' -exec ex -sc '%s/OLD/NEW/g|x' {} ';'
  1. % выбрать все строки

  2. s заменой

  3. g глобальная замена

  4. x сохранить и закрыть

0

Смотрите опцию -i в man sed .

-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if extension supplied)

Менее полезный, но связанный с этим, вы также можете связать несколько ключей -exec вместе; они выполняются слева направо.

tmp=$(tempfile)
find . -name '*.txt' -exec sed 's/oldtext/newtext/g' '{}' > $tmp \; -exec mv $tmp '{}' \;

(Обратите внимание на цитирование *.txt , {} и экранирование ; чтобы они не интерпретировались вашей оболочкой.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .