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

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

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

file1.txt file2.txt file3.txt

И я должен найти слово "searchword" и заменить его "replaceword".

11
задан Legend 15 February 2010 в 03:27
поделиться

3 ответа

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' "{}" +;
15
ответ дан 3 December 2019 в 03:04
поделиться

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

grep -lr -e '<searchthis>' * | xargs sed -i 's/<searchthis>/<replacewith>/g'
12
ответ дан 3 December 2019 в 03:04
поделиться

Использование сценария ed

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

for i in "$@"; do ed "$i" << \eof; done
1,$s/searchword/replaceword/g
w
q
eof
2
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: