замена grep с расширенной реализацией регулярных выражений - PullRequest
2 голосов
/ 05 февраля 2010

Я использовал grepWin для общего поиска файлов и wingrep, когда я хочу сделать замену или что-то еще.

GrepWin имеет обширную реализацию регулярных выражений, однако не выполняет замены (как упомянуто выше).

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

Кто-нибудь знает какие-либо (желательно бесплатные) инструменты grep для окон, которые выполняют замену И имеет разумную реализацию регулярных выражений?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 05 февраля 2010

Я думаю, что Perl в командной строке - это ответ, который вы ищете. Широкая портативная, мощная поддержка регулярных выражений.

Допустим, у вас есть следующий файл:

foo
bar
baz
quux

вы можете использовать

perl -pne 's/quux/splat!/' -i /tmp/foo

для производства

foo
bar
baz
splat!

Магия в переключателях командной строки Perl:

  • -e: выполнить следующий аргумент как команду perl.
  • -n: выполнить команду в каждой строке
  • -p: вывести результаты команды без явного «печать» заявление.
  • -i: сделать замены на месте. перезаписать документ с помощью вывод вашей команды ... используйте с осторожностью.
2 голосов
/ 05 февраля 2010

Я довольно часто использую Cygwin для такого рода задач.

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

Хорошо, что все инструменты работают как в реальной системе GNU, поэтому, если вы уже знакомы с Linux или подобным, вам не нужно изучать ничего нового (кроме как использовать этот сумасшедший установщик) .

В целом, я думаю, что преимущества восполняют несколько проблем юзабилити.

1 голос
/ 05 февраля 2010

Если вы работаете в Windows, вы можете использовать vbscript (не требует загрузки). Это приходит с регулярным выражением. например, изменить «один» на «один»

Set objFS=CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
strFile = objArgs(0)
Set objFile = objFS.OpenTextFile(strFile)
strFileContents = objFile.ReadAll
Set objRE = New RegExp
objRE.Global     = True
objRE.IgnoreCase = False
objRE.Pattern = "one"
strFileContents = objRE.Replace(strFileContents,"ONE") 'simple replacement
WScript.Echo strFileContents

выход

C:\test>type file
one
two one two
three

C:\test>cscript //nologo test.vbs file
ONE
two ONE two
three

Вы можете прочитать vbscript doc , чтобы узнать больше об использовании regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...