Regex Replace from Command line

¿Es posible regex reemplazar desde la línea de comandos? Ahora mismo estoy usando Notepad ++ para hacer esto. En la línea de comandos sólo puedo usar FINDSTR que sólo puede localizar los archivos / líneas mached

EDIT:
Tal vez será posible hacer un script VB y ejecutarlo desde cmd? Acabo de crear un archivo "hi.vbs" con el contenido

Msgbox "Hi Buddy" 

Entonces cmd me permite ejecutarlo directamente escribiendo "hi" desde la línea de comandos.
Así que si no es posible con la secuencia de comandos por lotes, entonces puedo usar un lote VB secuencia de comandos. O..?

ven aqui
http://gnuwin32.sourceforge.net/packages.html
Desplácese hasta SED. Descargar coreutils demasiado mientras estás en ello.

Este comando reemplazará a con b globalmente, y en cada línea. Por lo que no sólo la primera aparición en la línea.

Por ejemplo, utilizando 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 es compatible con expresiones regulares, puede encontrar y reemplazar con ella.

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

Muestra bxxx dxxx xxx

He escrito una herramienta de línea de comandos gratuita para Windows para hacer esto. Se llama rxrepl , es compatible con Unicode y la búsqueda de archivos. Algunos pueden encontrar una herramienta útil.

Rxrepl es una herramienta de línea de comandos de Microsoft Windows para buscar y reemplazar texto en archivos de texto mediante expresiones regulares compatibles con Perl (PCRE).

Tiene las siguientes características:

  • Búsqueda mediante expresiones regulares compatibles con Perl
  • Usar coincidencia de grupo en texto de reemplazo
  • Soporta las terminaciones de línea de Windows y Unix
  • Soporte Unicode
  • Acepta varios argumentos de búsqueda / sustitución
  • Las opciones pueden ser proporcionadas en un archivo de opciones
  • Buscar archivos
  • Modo de vista previa
  • Modos de alineación de línea y de archivo completo

Introduzca aquí la descripción de la imagen

El Scripting Guy explica cómo hacerlo en PowerShell (no hay descargas adicionales en los sistemas operativos Windows más recientes, es probable que ya lo hayan instalado).

Inicie, ejecute lo siguiente (para reemplazar un * con un @ ):

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

Esto soporta expresiones regulares .NET , incluyendo aspecto positivo y negativo, y todo tipo de cosas que Notepad ++ no soporta con regex antes de la versión 6.x (tanto como me encanta Notepad ++).

He encontrado fnr.exe para eso. Tiene GUI y línea de comandos.

Una herramienta de código abierto para encontrar y reemplazar texto en varios archivos.

Caracteristicas

  • Descarga de archivos individuales – fnr.exe (127kb)
  • Reemplazar texto en varios archivos mediante la aplicación de Windows o mediante la línea de comandos
  • Buscar solo para ver dónde se encuentran los partidos
  • Búsqueda sensible a mayúsculas
  • Búsqueda de archivos en un directorio o recursión de subdirectorios
  • Expresiones regulares
  • Buscar y reemplazar texto de varias líneas
  • Generar un botón de línea de comandos para crear texto de línea de comandos para ponerlo en un archivo por lotes
  • Ayuda de línea de comandos
  • Pruebas unitarias de motor de búsqueda / sustitución

Visualización de opciones de línea de comandos

Introduzca aquí la descripción de la imagen

Dos buenas opciones son Cygwin que le dará un Unix-como, bash-como el ambiente (alternativa a cmd.exe); Y Unxutils , puertos Win32 de una colección de utilidades Unix individuales. En cualquiera de los paquetes, vea 'sed', 'awk' y 'grep'.

Parece que puedes usar regex con FINDSTR

Findstr [Windows CMD] :

Findstr permite buscar texto (como se especifica con el patrón en el archivo file-name.) Si el nombre de archivo contiene caracteres comodín (* o?), Busca en todos los archivos que coinciden La opción / S busca en el directorio actual así como En sus subdirectorios.Si el patrón contiene espacios, debe especificarse así / C: "algún texto a buscar" Para convertir el patrón en expresiones regulares, debe usarse la opción / R. La opción / I busca el caso insensible.

De la ayuda de FindStr ( Findstr /? ):

/ R – Utiliza cadenas de búsqueda como expresiones regulares.

 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 [xy] 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 

Estoy un poco tarde a la fiesta, pero JREPL.BAT es un híbrido JScript / batch script basado en la utilidad regex que se ejecuta de forma nativa en cualquier máquina Windows desde XP en adelante.

La documentación completa está incorporada en el script, que se puede acceder a través de JREPL /? , O utilizar JREPL /?? Para la salida paginada.

JREPL utiliza ECGE estándar regex que viene con JScript. ECMA regex no es tan potente como la regex de .NET disponible para powershell, pero sigue siendo bastante bueno. Y creo que el usuario promedio encontrará esta utilidad más fácil de usar que powershell.

Las opciones JREPL incorporadas ya proporcionan mucha energía inherente, pero la capacidad de inyectar JScript suministrada por el usuario realmente abre posibilidades asombrosas.

He desarrollado el script porque mi lugar de trabajo no permite la descarga de archivos no estándar exe, pero no tiene ninguna restricción en la escritura de lotes o scripts JScript 🙂

Simplemente siga el enlace y copie el código de secuencia de comandos en un archivo denominado JREPL.BAT. Lea las publicaciones posteriores de ese hilo para ver ejemplos de historial de uso y desarrollo. También hay muchas respuestas StackOverflow que utilizan JREPL.BAT.

También puede utilizar GSAR para realizar la búsqueda y la sustitución de la línea de comandos. Funciona con hex y binario también. No hará el levantamiento de pesas complejo que regex puede realizar, pero para la búsqueda básica y reemplazar, hace el trabajo de forma rápida y sencilla.