Какой лучший инструмент для поиска и замены регулярных выражений в нескольких файлах?
Вопрос
Если есть возможность, желательно бесплатные инструменты.
Кроме того, бонусом будет возможность поиска по нескольким регулярным выражениям и замены каждого на разные строки.
Решение
Перл.Серьезно, это значительно упрощает работу сисадмина.Вот пример:
perl -pi -e 's/something/somethingelse/g' *.log
Другие советы
sed выполняется быстро и легко:
sed -e "s/pattern/result/" <file list>
вы также можете присоединиться к нему с помощью find:
find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"
Текстпад хорошо справляется с этой задачей в Windows.И это очень хороший редактор.
Для этого я написал бесплатный инструмент командной строки для Windows.Это называется rxrepl, он поддерживает Юникод и поиск файлов.Некоторые могут найти это полезным.
Неудивительно, что Perl прекрасно справляется с этой задачей в сочетании с достойной оболочкой:
for file in @filelist ; do
perl -p -i -e "s/pattern/result/g" $file
done
Это имеет тот же эффект (но более эффективен и без состояния гонки), что и:
for file in @filelist ; do
cat $file | sed "s/pattern/result/" > /tmp/newfile
mv /tmp/newfile $file
done
Редактор каталогов Emacs имеет функцию `dired-do-query-replace-regexp' для поиска и замены регулярного выражения в наборе отмеченных файлов.
Под Windows мне нравилось WinGrep
В Ubuntu я использую Regexxer.
Для поиска и замены нескольких файлов в Windows я нашел rxFind быть очень полезным.
Для Mac OS X эту работу выполняет TextWrangler.
Мой личный фаворит PowerGrep от JGSoft.Он взаимодействует с RegexBuddy который может помочь вам создать и протестировать регулярное выражение, автоматически создает резервные копии всех изменений (и предоставляет возможности отмены), обеспечивает возможность анализа нескольких каталогов (с шаблонами имен файлов) и даже поддерживает такие форматы файлов, как Microsoft Word, Excel и PDF.
Я бы выбрал bash + find + sed.
Вим на помощь (и президенту ;-)).Пытаться:
vim -c "argdo! s:foo:bar:gci" <list_of_files>
(Мне очень нравится ключ -c в Vim, это волшебство.Или если вы уже были в Vim и открыли файлы, например:
vim <list_of_files>
Просто выдайте:
:bufdo! s:foo:bar:gci
Конечно sed
и perl
тоже способен.ХТХ.
У меня есть роскошь Unix и Ubuntu;В обоих случаях я использую глазеть для всего, что требует построчного поиска и замены, особенно для построчного поиска подстрок.Недавно это было самым быстрым для обработки 1100 изменений против миллионов строк в сотнях файлов (один каталог) на Ubuntu Я фанат Regexxer
sudo apt-get install regexxer
В Windows есть бесплатная альтернатива, которая работает лучше всего:Блокнот++
Заходим в «Поиск» -> «Найти в файлах».Можно указать каталог, шаблон файла, установить регулярные выражения, затем просмотреть совпадения и, наконец, рекурсивно заменить все файлы.
Мне нравится этот инструмент:
Дает вам предварительный просмотр регулярного выражения «по мере ввода»…ФАНТАСТИКА для тех, кто не очень хорошо разбирается в RE...и он очень быстро меняет сотни или тысячи файлов одновременно...
А затем давайте также ОТМЕНИМ ваши изменения...
Очень хорошо...
Патрик Стейл -http://www.podiotools.com
если «текстовая панель» является правильным ответом, я бы предложил Возвышенный текст руки вниз.
Я считаю, что многокурсорное редактирование в целом является еще более эффективным способом замены, но это "Найти в файлах" — это верхний уровень для массовых замен регулярных выражений/простого поиска.
jПравитьПоиск и замена регулярных выражений в файлах довольно приличны.Однако это немного перебор, если вы используете его только для этого.Он также не поддерживает запрошенную вами замену нескольких выражений.
Я нашел инструмент RxFind полезно (бесплатное OSS).
Кронштейны (исходный код, deb/Ubuntu, OSx и Windows) имеет хорошую визуализацию результатов, позволяющую выбирать их индивидуально для применения замены.Вы можете выполнять поиск по стандартному тексту, с учетом регистра или без него, а также по регулярному выражению.Очень важно:вы можете исключить из поиска шаблоны файлов и каталогов.
На протяжении как минимум 25 лет я использую Emacs для крупномасштабной замены большого количества файлов.Бегать etags
чтобы указать любой набор файлов для поиска:
$ etags file1.txt file2.md dir1/*.yml dir2/*.json dir3/*.md
Затем откройте Emacs и запустите tags-query-replace
, который запрашивает регулярное выражение и замену:
\b\(foo\)\b
\1bar