ocehb: (Default)
[personal profile] ocehb
отсюда


Команда найдёт все файлы в текущем каталоге и подкаталогах, содержащие OLD_TEXT и заменит строку "OLD_TEXT" на "NEW_TEXT":
grep -HR OLDTEXT ./ | awk '{print $1}' | sed 's/:.*$//' | grep -v '~' | sort | uniq | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;"


мне кажется, что ужасно. мое решение:

grep -rl OLDTEXT . | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;"


если хочется убрать ненужные файлы, то вставить grep -Ev '(~|.o|.a)$', по вкусу.

ps. а sed 's/:.*$//' эффективно прибъёт файлы с двоеточием в имени.

pps. gnu grep умеет -Z

Date: 2011-06-23 01:52 pm (UTC)
From: [identity profile] alesk.livejournal.com
спасибо за красивое решение! обновил первоисточник.

Date: 2011-06-23 09:01 pm (UTC)
avysk: (Default)
From: [personal profile] avysk
Баг. Показать? :-)

Date: 2011-06-23 09:04 pm (UTC)
avysk: (Default)
From: [personal profile] avysk
Демонстрирую результат эксперимента:
$ grep -rl OLD_TEXT . | wc -l
    1
$ grep -rl OLD_TEXT . | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;" >/dev/null 2>&1
$ grep -rl OLD_TEXT . | wc -l
    1
$ grep -rl NEW_TEXT .
$ 

Date: 2011-06-23 09:10 pm (UTC)
avysk: (Default)
From: [personal profile] avysk
О, я, наконец, прочитал pps про -Z

А без него?

Date: 2011-06-24 09:19 am (UTC)
avysk: (Default)
From: [personal profile] avysk
Ага, зачёт. Но исходный-то вариант всё же с багом :)

Date: 2011-06-24 09:18 am (UTC)
avysk: (Default)
From: [personal profile] avysk
Конечно :) Там был файл с пробелом в имени.

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 05:50 pm
Powered by Dreamwidth Studios