Я хочу выполнить сложный поиск и заменить то, что я делаю с notepad++, используя командную строку. Я нашел много решений из Интернета, но ни одно из них не соответствует моим требованиям.

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

Другой файл, содержащий строки регулярных выражений (оба находят с и заменяют на. Я могу играть с этим, чтобы сделать два отдельных файла или что-нибудь.)

Также, пожалуйста, укажите, как поместить регулярное выражение для поиска и замены строк в этом файле, если это возможно сделать вышеупомянутой задачей.

редактировать

Любая совместимая с PCRE утилита для поиска и замены Windows?

1 ответ1

1

есть команда windows "findstr", но она не может заменить и имеет ограниченную поддержку регулярных выражений. Помимо этого посмотрите, как это сделать с * nix, а затем используйте эти инструменты в Windows. Так что вы можете получить grep и sed для windows.

Некоторые люди, работающие в пакетном режиме, могут использовать инструмент (возможно, созданный экспертом по пакетному анализу Дейвом Бенхэмом), который объединяет Microsoft SQL с пакетным и имеет параметры для поиска и замены. Я думаю, это прекрасно, если вы работаете в очень закрытой системе и не можете даже загрузить EXE. Но в противном случае загрузка или копирование / вставка скрипта почти равносильны получению сторонних приложений, и тогда уже есть инструменты, такие как grep и sed, которые широко используются и могут быть загружены для окон.

*? является ленивой оценкой, которая немного продвинута и требует -P (PCRE - регулярные выражения, совместимые с perl)

C:\>echo abccccdd| grep -oP "a.*?c"
abc

C:\>

Вы можете удалить -P, если хотите, если регулярное выражение менее продвинутое. Хотя я держу это.

Sed не идет так далеко, как PCRE, но поддерживает то, что кажется следующим лучшим в этих утилитах командной строки. ERE (расширенные регулярные выражения). Использование sed с -r может избавить вас от необходимости использовать лишние обратные слеши. В прошлый раз, когда я проверял, без -r он использует BRE (базовые регулярные выражения).

Это означает заменить это регулярное выражение ничем

C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd

Этот модификатор /g будет выполнять глобальный поиск и замену, поэтому не просто заменит первое совпадение

C:\>echo abacacda| sed "s/a//g"
bccd

Вы можете получить его с помощью gnuwin32, или вы можете использовать его из cygwin, хотя затем используйте одинарные кавычки, а если вы используете cygwin, то лучше сделать это из оболочки cygwin, например оболочки cygwin bash.

Эти команды могут работать с файлами, очевидно.

C:\>type a.a
asdf

C:\>


C:\>grep -o a a.a
a

C:\>sed "s/a/z/" a.a
zsdf

C:\>

Или Perl

grep не будет искать и заменять. Sed будет, хотя Sed не поддерживает PCRE(по крайней мере, не Sed у меня). Другой вариант - Perl. Perl регулярные выражения так же хороши, как PCRE, если не лучше. Посмотрите здесь https://stackoverflow.com/questions/4794145/perl-one-liner-like-grep и увидите, что в нем упоминается эта ссылка Perl для сопоставления с регулярными выражениями в Terminal? посмотрите мой ответ, там есть perl-формы grep и sed, и у вас будет отличная поддержка регулярных выражений с помощью perl

Если вы посмотрите мой ответ по второй ссылке (как я уже сказал), то вы увидите, что я говорю, что я получил и использовал там perl в cygwin, а также как его можно использовать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .