Найти и заменить определенный термин в нескольких файлах - PullRequest
11 голосов
/ 15 февраля 2010

Как заменить конкретный термин в нескольких файлах в Linux?

Например, в моем каталоге есть несколько файлов:

file1.txt file2.txt file3.txt

И мне нужно найти слово «searchword» и заменить его на «replaceword».

Ответы [ 5 ]

15 голосов
/ 15 февраля 2010
sed -i.bak 's/searchword/replaceword/g' file*.txt
# Or sed -i.bak '/searchword/s/searchword/replaceword/g' file*.txt

В bash 4.0 вы можете выполнять рекурсивный поиск файлов

#!/bin/bash
shopt -s globstar
for file in **/file*.txt
do 
  sed -i.bak 's/searchword/replaceword/g' $file
  # or sed -i.bak '/searchword/s/searchword/replaceword/g' $file
done

Или с помощью GNU find

find /path -type f -iname "file*.txt" -exec sed -i.bak 's/searchword/replace/g' "{}" +;
12 голосов
/ 15 февраля 2010

Ничего впечатляющего, но думал, что это может помочь другим. Хотя вы можете написать сценарий оболочки, чтобы сделать это легко, эта строка может быть проще:

grep -lr -e '<searchthis>' * | xargs sed -i 's/<searchthis>/<replacewith>/g'
2 голосов
/ 15 февраля 2010

Использовать скрипт ed

Хотя у sed теперь есть опция редактирования на месте, для этой цели вы также можете использовать программу ed или ex ...

for i in "$@"; do ed "$i" << \eof; done
1,$s/searchword/replaceword/g
w
q
eof
0 голосов
/ 16 сентября 2014

Попробуйте mffr , если вы находитесь в git-репо

pip install mffr
mffr searchword replaceword
0 голосов
/ 07 марта 2014

Этот скрипт ruby ​​работал для меня, также переименовывает файлы / папки с этой опечаткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...