Как я могу заменить определенный термин в нескольких файлах в Linux?
Например, у меня есть несколько файлов в моем каталоге:
файл1.txt файл2.txt файл3.txt
И мне нужно найти слово «поисковое слово» и заменить его на «заменить слово».
Как я могу заменить определенный термин в нескольких файлах в Linux?
Например, у меня есть несколько файлов в моем каталоге:
файл1.txt файл2.txt файл3.txt
И мне нужно найти слово «поисковое слово» и заменить его на «заменить слово».
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 /path -type f -iname "file*.txt" -exec sed -i.bak 's/searchword/replace/g' "{}" +;
Ничего впечатляющего, но подумал, что это может помочь другим. Хотя вы можете написать сценарий оболочки, чтобы сделать это легко, этот однострочный код, возможно, проще:
grep -lr -e '<searchthis>' * | xargs sed -i 's/<searchthis>/<replacewith>/g'
sed 's<searchthis>/<replacewith>/g' -i *
- person JAL; 15.02.2010
sed
там, где нет поискового запроса. Думаю, более эффективно, когда файлы большие.
- person Tom Duckering; 15.02.2010
Хотя у sed теперь есть опция редактирования на месте, вы также можете использовать для этой цели программу ed или ex...
for i in "$@"; do ed "$i" << \eof; done
1,$s/searchword/replaceword/g
w
q
eof
Этот ruby-скрипт сработал для меня, а также переименовывает файлы/папки с этой опечаткой.
Попробуйте mffr, если вы находитесь в репозитории git.
pip install mffr
mffr searchword replaceword