среда, 21 октября 2009 г.

Задача заменить stroka1 на stroka2 во всех файлах выбранной директории. При это во вложенных каталогах так же.

Возможно есть способы поизящнее, я решила поюзать perl + find.

Как использовать perl взяла вот тут .

Получила в итоге:

find . -type f -exec perl -i -ne "s/stroka1/stroka2/g;print;" '{}' \;

Естествнное, первый параметр у find вместо . может быть любой путь, так же вместо stroka1, stroka2 - любое вырожение.

Заработало.

Как всегда забыла про скрытые файлы в папках .svn подрихтовала с учетом того, что я писала ранее :) 

5 комментариев:

  1. перл слишком круто для такого. Хотя и универсально.
    Вот частное решение (я правда CVS исключал)

    find . -type f -not -path '*/CVS/*' -exec replace stroka1 stroka2 -- {} +

    ОтветитьУдалить
  2. Женечка, спасибо мое солнце :-* но у меня дневний tcsh, и кроме того команды replae у меня нет :( админских прав тоже.
    Но буду знать, вдруг следующей жизни повезет больше :)

    ОтветитьУдалить
  3. УПС! Хотел поругать твою систему, выяснил, что это часть MySQL :) то-то у неё аргументы нестандартно-гнушные были.

    ОтветитьУдалить
  4. Нашел гнусную утилю.
    замена в файле, с регекспами:
    sed -i 's/void/VOID/g' md5.*

    В некоторых источниках упоминается как gsed

    ОтветитьУдалить
  5. Угу, только ее не рекомендуют использовать, когда входной и выходной поток один файл. Вывод она делает в выходной поток :)

    ОтветитьУдалить

Моя фотография
http://aal.flamber.ru - мой фотоальбом