Подтвердить что ты не робот

Найти и заменить определенный термин в нескольких файлах

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

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

file1.txt file2.txt file3.txt

И мне нужно найти слово "поиск" и заменить его "replaceword".

4b9b3361

Ответ 1

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' "{}" +;

Ответ 2

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

grep -lr -e '<searchthis>' * | xargs sed -i 's/<searchthis>/<replacewith>/g'

Ответ 3

Используйте команду ed script

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

for i in "[email protected]"; do ed "$i" << \eof; done
1,$s/searchword/replaceword/g
w
q
eof

Ответ 4

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

Ответ 5

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

pip install mffr
mffr searchword replaceword