20

Можно ли регулярное выражение заменить из командной строки? Прямо сейчас я использую notepad++, чтобы сделать это. В командной строке я могу использовать только FINDSTR, который может найти только сопоставленные файлы / строки

РЕДАКТИРОВАТЬ :
Может быть, удастся сделать скрипт VB и запустить его из cmd? Я только что создал файл "hi.vbs" с содержанием

Msgbox "Hi Buddy"

Затем cmd позволяет мне запустить его, набрав "hi" из командной строки.
Так что, если это невозможно с пакетным скриптом, то я могу использовать пакетный скрипт VB. Или же..?

8 ответов8

25

Я написал бесплатный инструмент командной строки для Windows, чтобы сделать это. Он называется rxrepl, он поддерживает Unicode и поиск файлов. Некоторые могут найти это полезным инструментом.

rxrepl - это инструмент командной строки Microsoft Windows для поиска и замены текста в текстовых файлах с использованием Perl-совместимых регулярных выражений (PCRE).

Он имеет следующие особенности:

  • Поиск с использованием Perl-совместимых регулярных выражений
  • Использовать сопоставление группы в тексте замены
  • Поддерживает окончания строк Windows и Unix
  • Поддержка юникода
  • Принимает несколько аргументов поиска / замены
  • Опции могут быть предоставлены в файле опций
  • Сканирование файлов
  • Режим предварительного просмотра
  • Линейный и полный режим сопоставления файлов

11

иди сюда
http://gnuwin32.sourceforge.net/packages.html
прокрутите вниз до САС. Скачайте coreutils тоже, пока вы на нем.

эта команда заменит a на b глобально и в каждой строке. так что не только первое вхождение на линии.

например, используя sed "s/a/b/g" a.txt

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScript поддерживает регулярные выражения, вы можете найти и заменить его.

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

Отображает bxxx dxxx xxx

11

Сценарист рассказывает, как это сделать в PowerShell (никаких дополнительных загрузок в большинстве последних версий ОС Windows вы, вероятно, уже установили).

Запустите его, запустите следующее (чтобы заменить * на @):

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

Это поддерживает регулярные выражения .NET, включая положительный и отрицательный упреждения, и все, что Notepad ++ не поддерживал с регулярным выражением до версии 6.x (насколько я люблю notepad ++).

5

Я нашел fnr.exe для этого. Имеет графический интерфейс и командную строку.

Инструмент с открытым исходным кодом для поиска и замены текста в нескольких файлах.

Характеристики

  • Загрузка одного файла - fnr.exe (127 КБ)
  • Заменить текст в нескольких файлах с помощью приложения Windows или через командную строку
  • Найти только, чтобы увидеть, где найдены совпадения
  • Поиск с учетом регистра
  • Поиск файлов в одном каталоге или повторяющихся подкаталогах
  • Регулярные выражения
  • Найти и заменить многострочный текст
  • Создать кнопку командной строки для создания текста командной строки для помещения в командный файл
  • Помощь командной строки
  • Модульные тесты поиска / замены двигателя

Просмотр параметров командной строки

4

Я немного опаздываю на вечеринку, но JREPL.BAT - это гибридная утилита регулярных выражений на основе JScript/batch-скриптов, которая работает на любом компьютере под управлением Windows начиная с XP.

Полная документация встроена в скрипт, доступ к которому можно получить через JREPL /? , или используйте JREPL /?? для постраничного вывода.

JREPL использует стандартное регулярное выражение ECMA, которое поставляется с JScript. Регулярное выражение ECMA не так мощно, как регулярное выражение .NET, доступное для powershell, но все равно чертовски хорошо. И я думаю, что обычный пользователь найдет эту утилиту проще в использовании, чем powershell.

Встроенные параметры JREPL уже предоставляют массу возможностей, но возможность внедрить пользовательский JScript действительно открывает удивительные возможности.

Я разработал сценарий, потому что мое рабочее место не позволяет загружать нестандартные исполняемые файлы, но не имеет ограничений на написание пакетных или JScript-скриптов :-)

Просто перейдите по ссылке и скопируйте код скрипта в файл с именем JREPL.BAT. Прочитайте последующие посты из этой ветки для примеров использования и истории развития. Есть также много ответов StackOverflow, которые используют JREPL.BAT.

4

Похоже, вы можете использовать регулярные выражения с FINDSTR

findstr [Windows CMD]:

findstr позволяет искать текст (как указано с шаблоном в имени файла file. Если имя-файла содержит символы подстановки (* или?), Поиск выполняется по всем совпадающим файлам. Опция /S ищет в текущем каталоге, а также в его подкаталогах. Если шаблон содержит пробелы, он должен быть указан как /C:"некоторый текст для поиска". Чтобы превратить шаблон в регулярные выражения, необходимо использовать параметр /R. Параметр /I выполняет поиск без учета регистра.

Из справки FindStr (Findstr /?):

/R - использовать строки поиска как регулярные выражения.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word
3

Два хороших варианта - либо Cygwin, который предоставит вам Unix-подобную, bash-подобную среду (альтернативу cmd.exe); и Unxutils, Win32 порты из набора отдельных утилит Unix. В любом из пакетов смотрите «sed», «awk» и «grep».

0

Вы также можете использовать GSAR для поиска и замены командной строки. Работает с шестнадцатеричным и двоичным файлами. Он не будет выполнять сложную работу, которую может выполнять регулярное выражение, но для базового поиска и замены он выполняет работу быстро и легко.

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