Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Поиск и замена в дереве каталогов под unix

Модерирует : KLASS, IFkO

articlebot (10-10-2005 03:45): Перемещено в форум "UNIX"  Версия для печати • ПодписатьсяДобавить в закладки

   

Magi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такая программка поиска и замены с исходниками
http://gnuwin32.sourceforge.net/packages/gsar.htm
Вот примерная строка запуска.
 
gsar -s"что менять" -r"на что менять" *.* -o
 
Но у нее есть недостаток - не ищет рекурсивно по дереву каталогов.
Была у меня как-то комбинация с find для запуска рекурсивно, но потерялась и не могу вспомнить и найти. Подскажите пожалуйста, как можно gsar по дереву пустить?

Всего записей: 621 | Зарегистр. 12-12-2001 | Отправлено: 03:16 30-05-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
find . -type f -name * -exec gsar [parameters] {} \;
Только нафик этот gsar нужен, если есть более "родные" утилиты? Я бы пользовался sed'ом.

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 13:33 30-05-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Magi
 
Я перлом делала.
 
>cd папка
>/usr/bin/perl -i.bak -p -e '/s/что_меняем/на_что_меняем/gi;' ./*  
или:
>/usr/bin/perl -i.bak -p -e '/s/что_меняем/на_что_меняем/gi;' путь_к_файлам
можно не создавать bak-файлы:
>/usr/bin/perl -p -e '/s/что_меняем/на_что_меняем/gi;' путь_к_файлам
 
 
 
 
 
 
Добавлено
ooptimum

Цитата:
 Я бы пользовался sed'ом.

 
Покажи, как.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 13:34 30-05-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx
Вам волю дай только, все перлом делать будете...
 
Добавлено
Показываю:
find . -type f -name * -exec sed -i 's:"что меняем":"на что меняем":' {} \;
Вот, например, так.
 
Добавлено
А еще лучше grep'ом искать, если "что меняем" встречается не в каждом файле. А потом в for-цикле изменять найденные файлы.

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 13:42 30-05-2004
Magi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Perl'ом нужно спецсимволы закомментировать, что неудобно, когда в строках их много, sed при задании маски *.* фигачит все файлы, в том числе и бинарные и BerkeyDB у меня уже один раз запортил.
 
# find . -type f -name * -exec "gsar -s"www.domain.ru" -r"domain.ru" *.shtml -o" {} \;
find: 100: unknown option
 
FreeBSD 4.8

Всего записей: 621 | Зарегистр. 12-12-2001 | Отправлено: 15:13 30-05-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Magi

Цитата:
find: 100: unknown option  

Разве я тебе писал, чтобы ты gsar свой в кавычки заключала? Посмотри внимательно, что я написал и что ты.
 

Цитата:
sed при задании маски *.* фигачит все файлы

Аналогично. Разве я тебе писал использовать с sed'ом маску "*.*"? Хотя ты сама эту же самую маску используешь с gsar'ом.
 
Идеология Unix:  одна функция -- одна команда. Из вот таких вот функций-команд ты уже составляешь "программу", которая тебе нужна. В твоем случае задача легко раскладывается на следующие подзадачи: "найти" и "изменить все найденное". "изменить все найденное", в свою очередь, раскладывается на: "перебрать найденное" и "изменить". Теперь имеем такое сопоставление между подзадачами и командами, которые будем использовать: "найти" -- grep, "перебрать найденное" -- for и "изменить" -- sed. Собираем все вместе:

Код:
for f in `grep -r "что ищем" *`; do sed -i 's:"что меняем":"на что меняем":' $f; done

Вот и все. Никаких дополнительных утилит, а только те, что уже есть в твоей системе. Никакие лишние файлы изменены не будут, тем более, что ты можешь задавать более точные критерии поиска grep'у.
 
Добавлено
В общем, у тебя не команда, а нонсенс какой-то получился. Ты пришешь:
Цитата:
find . -type f -name * -exec "gsar -s"www.domain.ru" -r"domain.ru" *.shtml -o" {} \;  

а надо было:

Код:
find . -type f -name *.shtml -exec gsar -s"www.domain.ru" -r"domain.ru" {} -o \;

Насчет параметров gsar я не уверен. В частности, я не знаю, что такое "-o". Overwrite может быть? Не знаю...
 
 
Добавлено
Хм... Что-то мои поиски пока говорят, что gsar -- утилита под MS-DOS и выше. А тут FreeBSD...

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 15:48 30-05-2004 | Исправлено: ooptimum, 15:58 30-05-2004
Magi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ooptimum
Я вообще-то он
Кавычки - это от безысходности. Пробовал и с ними и без них и с апострофами - ошибка та же.
Там на странице есть ссskrf на исходники из которых я их скомпилировал под FreeBSD
http://aleron.dl.sourceforge.net/sourceforge/gnuwin32/gsar-1.11-src.zip

Всего записей: 621 | Зарегистр. 12-12-2001 | Отправлено: 18:10 30-05-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Magi

Цитата:
Я вообще-то он

Оп-ля... Я думал о такой возможности, но у меня есть несколько знакомых противоположного пола с таким же или крайне похожим ником (maggy и т.д.), так что я эту возможность отмел, как несущественную. Сорри, если что... Исправить вверху?
 

Цитата:
Пробовал и с ними и без них и с апострофами - ошибка та же.  

Сегодня попозже попробую под фрей. У тебя шелл какой во фре? Это может быть существенно. Я писал под [ba]sh.
 
Добавлено
Кстати, команда
Цитата:
for f in `grep -r "что ищем" *`; do sed -i 's:"что меняем":"на что меняем":' $f; done
что, не работает у тебя?

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 19:51 30-05-2004
Magi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ooptimum

Цитата:
Исправить вверху?

Да ладно, не обязательно  

Цитата:
Сегодня попозже попробую под фрей. У тебя шелл какой во фре? Это может быть существенно. Я писал под [ba]sh.

Я под csh пробовал.
под bash и sh
#find . -type f -name *.shtml -exec gsar -s"www.domain.ru" -r"domain.ru" {} -o \;
find: No match.
 
 

Всего записей: 621 | Зарегистр. 12-12-2001 | Отправлено: 21:06 30-05-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Magi

Цитата:
find: No match.

А если вместо "-name *.shtml" попробовать "-iname *html"?

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 22:03 30-05-2004
Magi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
То же самое

Всего записей: 621 | Зарегистр. 12-12-2001 | Отправлено: 09:46 01-06-2004
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Magi

Цитата:
#find . -type f -name *.shtml -exec gsar -s"www.domain.ru" -r"domain.ru" {} -o \;
find: No match.

По-хорошему спецсимволы надо экранировать.
Попробуй так:

Код:
#find . -type f -name '*.shtml' -exec gsar -s"www.domain.ru" -r"domain.ru" {} -o \;


----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 11:53 01-06-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
f_serg

Цитата:
По-хорошему спецсимволы надо экранировать.  

В данном случае звездочку не нужно экранировать.
 
Magi
У тебя вообще команда `find . -type f -name *html` что-нибудь выводит? Т.е. находит файлы, заканчивающиеся на "html"?

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 14:38 01-06-2004
Magi

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
Спасибо!
Вот это find . -type f -name '*.shtml' -exec gsar -s"www.domain.ru" -r"domain.ru" {} -o \; заработало!

Всего записей: 621 | Зарегистр. 12-12-2001 | Отправлено: 17:10 01-06-2004
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ooptimum

Цитата:
В данном случае звездочку не нужно экранировать.

Смотря что за случай. А если в текущем каталоге есть файлы .shtml? Шелл немедленно раскроет шаблон и файнд получит маленько не то, что мы хотели.
Magi
Вот и чудненько.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 17:40 01-06-2004
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
f_serg
Хм. Я команду писал по памяти, не проверяя. Да, ты прав, экранировать надо.
Никто не знает столько, сколько я забыл...
 
Добавлено
Magi

Цитата:
Вот это find . -type f -name '*.shtml' -exec gsar -s"www.domain.ru" -r"domain.ru" {} -o \; заработало!

Тут только две кавычки от коллеги f_serg, а все остальное мое. Не забыл?

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 18:57 01-06-2004
   

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Поиск и замена в дереве каталогов под unix
articlebot (10-10-2005 03:45): Перемещено в форум "UNIX"


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru