Назад | Перейти на главную страницу

псевдоним для замены текста в файле

вот практическая ситуация. Я сталкиваюсь с некоторыми из моих файлов, в которых есть общая строка. Обычно я открываю vi и делаю что-то вроде

:%s/text/replacement/g

и мне приходится делать это во многих файлах много-много раз. Есть ли какой-нибудь простой способ сделать это или какой-то псевдоним, который я могу создать для того же?

Ах да, время для перлового лайнера. Как насчет этого?

perl -pi -e 's/old text/new text/' file

или, может быть, вы хотите изменить все файлы * .txt в текущем каталоге? В таком случае, как насчет объединения его с GNU parallel:

parallel perl -i.bak -pe 's/foo/bar/' ::: *.txt

Параллельно с этим ::: средства используйте все после этого как входные файлы.

или изменить все txt файлы в текущем каталоге и ниже:

find . -name \*txt -print0 | parallel -q -0 perl -i.bak -pe 's/old text/new text/'

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

В любом случае очевидно sed Ответ стандартный, но есть и забавные альтернативные способы сделать это. Также, если у вас много файлов, gnu parallel будет значительно быстрее, поскольку он запускает несколько копий параллельно (как можно было бы надеяться, учитывая имя).

Вы можете использовать find для поиска целевых файлов, а затем передать его в sed:

найти | xargs sed -i 's / foo / bar / g'

Заменить только в файлах .txt:

найти . -name "* .txt" -print | xargs sed -i 's / foo / bar / g'

(из это сообщение в блоге)

Посмотрите sed, примерно так:

sed -i 's/text/replacement/g' file