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

StackOverflow https://stackoverflow.com/questions/1895819

Вопрос

Как мне найти и заменить строку в командной строке в нескольких файлах в unix?

Это было полезно?

Решение

есть много способов .Но одним из ответов было бы:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

Другие советы

Как решение для зомби (и, я полагаю, быстрее), но с сэд (стандартно для многих дистрибутивов и OSX) вместо Perl :

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

Это заменит все фу вхождения в ваши файлы Python ниже текущего каталога с бар и создайте резервную копию для каждого файла с .пи.бак расширение.

И удалить файлы de .bak:

find . -name "*.bak" -delete

Я всегда делал это с отредактированные скрипты или бывшие скрипты.

for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

В бывший команда - это просто :линейный режим из vi.

Используя find и sed с именем или каталоги с пробелом, используйте это:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

с недавней оболочкой bash и предполагая, что вам не нужно просматривать каталоги

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top