Какой лучший инструмент для поиска и замены регулярных выражений в нескольких файлах?

StackOverflow https://stackoverflow.com/questions/102083

  •  01-07-2019
  •  | 
  •  

Вопрос

Если есть возможность, желательно бесплатные инструменты.

Кроме того, бонусом будет возможность поиска по нескольким регулярным выражениям и замены каждого на разные строки.

Это было полезно?

Решение

Перл.Серьезно, это значительно упрощает работу сисадмина.Вот пример:

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.

PowerGrep Screenshot

Я бы выбрал 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 есть бесплатная альтернатива, которая работает лучше всего:Блокнот++

Заходим в «Поиск» -> «Найти в файлах».Можно указать каталог, шаблон файла, установить регулярные выражения, затем просмотреть совпадения и, наконец, рекурсивно заменить все файлы.

Мне нравится этот инструмент:

http://www.abareplace.com/

Дает вам предварительный просмотр регулярного выражения «по мере ввода»…ФАНТАСТИКА для тех, кто не очень хорошо разбирается в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top