Regex Substituir da linha de comando

16

É possível regex substituir a linha de comando? Agora estou usando o notepad ++ para fazer isso. Na linha de comando só posso usar o FINDSTR, que só pode localizar os arquivos / linhas usinados

EDIT:
Talvez seja possível criar um script VB e executá-lo a partir do cmd? Acabei de criar um arquivo "hi.vbs" com o conteúdo

Msgbox "Hi Buddy"

Então o cmd me permite executá-lo diretamente digitando "hi" na linha de comando.
Portanto, se não for possível com script em lote, posso usar um script VB através de lote. Ou ...?

    
por Aziz 23.09.2011 / 16:08

8 respostas

8

clique aqui link
desloque-se para SED. Faça o download do coreutils também enquanto estiver nisso.

este comando substituirá a por b globalmente e em cada linha. não apenas a primeira ocorrência na linha.

por exemplo. usando 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:\>

O VBScript suporta expressões regulares, você pode encontrar e substituir por ele.

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")

Exibe bxxx dxxx xxx

    
por 04.10.2011 / 16:18
20

Eu escrevi uma ferramenta de linha de comando gratuita para o Windows fazer isso. Ele é chamado de rxrepl , ele suporta Unicode e pesquisa de arquivos. Alguns podem achar que é uma ferramenta útil.

rxrepl is a Microsoft Windows command line tool to search and replace text in text files using Perl compatible regular expressions (PCRE).

It has the following features:

  • Search using Perl Compatible Regular Expressions
  • Use group matching in replacement text
  • Supports Windows and Unix line endings
  • Unicode support
  • Accepts multiple search/replace arguments
  • Options may be provided in an options file
  • Scan for files
  • Preview mode
  • Line and full file matching modes

    
por 23.01.2013 / 21:08
9
por 23.09.2011 / 19:42
3

Parece que você pode usar o regex com FINDSTR

findstr [Windows CMD] :

findstr allows to search for text (as specified with pattern in the file file-name. If file-name contains wildcards (* or ?), it searches in all files that match. The option /S searches in the current directory as well as in its subdirectories. If pattern contains spaces, it must be specified like so /C:"some text to be searched". In order to turn pattern into a regular expressions, the /R option must be used. The /I option searches case insensitive.

Da ajuda do FindStr ( Findstr /? ):

/R - Uses search strings as regular expressions.

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
    
por 23.09.2011 / 16:18
3

Eu encontrei o fnr.exe para isso. Tem GUI e linha de comando.

An open source tool to find and replace text in multiple files.

Features

  • Single file download - fnr.exe (127kb)
  • Replace text in multiple files using windows application or through command line
  • Find Only to see where matches are found
  • Case-sensitive searching
  • Searching for files in one directory or recursing sub-directories
  • Regular expressions
  • Find and replace multi-line text
  • Generate command line button to create command line text to put in batch file
  • Command line help
  • Unit tests of Find/Replace engine

Exibindo opções de linha de comando

    
por 29.09.2013 / 13:46
3

Estou um pouco atrasado para a festa, mas JREPL.BAT é um script JScript / lote híbrido utilitário baseado em regex que é executado nativamente em qualquer máquina Windows do XP em diante.

A documentação completa está incorporada ao script, que pode ser acessado por meio de JREPL /? ou use JREPL /?? para saída paginada.

O JREPL usa o regex ECMA padrão que vem com o JScript. O regex ECMA não é tão poderoso quanto o .NET regex disponível para o powershell, mas ainda é muito bom. E eu acho que o usuário comum achará esse utilitário mais fácil de usar do que o powershell.

As opções JREPL incorporadas já fornecem bastante poder inerente, mas a capacidade de injetar JScript fornecido pelo usuário realmente abre possibilidades incríveis.

Eu desenvolvi o script porque o meu local de trabalho não permite o download de arquivos exe não padrão, mas não tem restrições sobre a gravação de scripts em lote ou JScript: -)

Basta seguir o link e copiar o código de script em um arquivo chamado JREPL.BAT. Leia os posts subseqüentes desse segmento para exemplos de histórico de uso e desenvolvimento. Há também muitas respostas do StackOverflow que usam o JREPL.BAT.

    
por 24.01.2016 / 00:10
2

Duas boas escolhas são Cygwin , que lhe dará um ambiente parecido com o Unix (alternativo ao cmd.exe) ; e Unxutils , portas Win32 de uma coleção de utilitários Unix individuais. Em qualquer pacote, veja 'sed', 'awk' e 'grep'.

    
por 23.09.2011 / 16:35
0

Você também pode usar o GSAR para executar a pesquisa e a substituição da linha de comando. Funciona com hexadecimal e binário também. Ele não fará o trabalho pesado complexo que o regex pode executar, mas para pesquisa básica e substituição, ele faz o trabalho com rapidez e facilidade.

    
por 06.01.2017 / 00:52