URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2014
[ Назад ]

Исходное сообщение
"Поиск и замена в файлах"

Отправлено vavcg , 22-Авг-03 16:15 
Кто-нибудь писал скрипт на sh , чтобы он начиная с определенной директории
просматривал все файлы по маске и заменял там одно выражение на другое ???
Ну, короче, replace-р такой .
Если есть возможность, приведите, пожалуйста текст .
Спасибо .

Содержание

Сообщения в этом обсуждении
"Поиск и замена в файлах"
Отправлено konst , 22-Авг-03 16:50 
>Кто-нибудь писал скрипт на sh , чтобы он начиная с определенной директории
>
>просматривал все файлы по маске и заменял там одно выражение на другое
>???
>Ну, короче, replace-р такой .
>Если есть возможность, приведите, пожалуйста текст .
>Спасибо .
for i in `find DIRECTORY | grep ".txt$"`;do
tmpF=$i"_tmpZ"
cat $i | perl -ne "s/first/second/;print;' > $tmpF
mv -f $tmpF $i
done

- но надо быть осторожным!!!


"Поиск и замена в файлах"
Отправлено vavcg , 22-Авг-03 17:13 
for i in `find DIRECTORY | grep ".txt$"`;do
tmpF=$i"_tmpZ"
cat $i | perl -ne "s/first/second/;print;' > $tmpF
mv -f $tmpF $i
done

Я так понял :

DIRECTORY - начальная директория для поиска
.txt - маска файла
first/second - что искать/на что заменять

Правильно ???
Кстати, тут без перла не обошлось...
А просто на шелле можно ???

И почему надо быть осторожным ???


"Поиск и замена в файлах"
Отправлено konst , 22-Авг-03 17:30 
>for i in `find DIRECTORY | grep ".txt$"`;do
>tmpF=$i"_tmpZ"
>cat $i | perl -ne "s/first/second/;print;' > $tmpF
>mv -f $tmpF $i
>done
>
>Я так понял :
>
>DIRECTORY - начальная директория для поиска
>.txt - маска файла
>first/second - что искать/на что заменять
>
>Правильно ???
ДА
>Кстати, тут без перла не обошлось...
>А просто на шелле можно ???
можно пользовать sed или awk (я не помню синтаксис см.man sed | awk), или perl - у него возможностей больше - можно "навароченные regexp'ы использовать. Сам shell - это всего лишь оболочка из которой вызываются сторонние програмки
>
>И почему надо быть осторожным ???
Сначала закоментируй строчку mv -f - посмотри на результат во временных файлах - если устраивает - раскомментируй (но в любом случае создай архив из изначальных файлов
tar -czvf original.tgz `find DIRECTORY | grep "[.]txt$" `


"Поиск и замена в файлах"
Отправлено vavcg , 22-Авг-03 17:37 
Понятно, но про шелл я имел в виду следующее :
Как я из логов апача ip выцепляю -

cut -f1 -d' ' /usr/local/apache/logs/access_log | sort | uniq -c | sort -r > /usr/local/apache/htdocs/stat/ip.txt

Думал, можно и замену проделать в том же духе...


"Поиск и замена в файлах"
Отправлено vavcg , 22-Авг-03 18:51 
Посидел я тут и придумал такую штуку.
Система FeeBSD.
Ставим из портов /usr/ports/textproc/replaceit - заменяет в файле
что-то на что-то.
А дальше, как мне советовали (ну, почти) :

Содержимое файла replace.sh :

for i in `find $1 | grep "$2$"`;do
cp $i $i.bak
/usr/ports/textproc/replaceit/work/replaceit-1.0.0/replaceit --input=$i "$3" "$4"
done

Использование :

./replace.sh directory-to-parse file-mask what with-what

У меня работает !