¿Hay alguna utilidad sed para cmd.exe?

Quiero editar programáticamente el contenido del archivo usando la línea de comando de Windows ( cmd.exe ). En * nix hay sed para estas tareas. ¿Hay algún equivalente útil en Windows?

Editar: Estoy buscando una solución de línea de comando nativa.

Hoy PowerShell me salvó.

Para grep hay:

 get-content somefile.txt | where { $_ -match "expression"} 

y para sed hay:

 get-content somefile.txt | %{$_ -replace "expression","replace"} 

Para más detalles, ver la entrada del blog de Zain Naboulsis .

sed (y su tipo) están contenidos en varios paquetes de comandos de Unix.

  • Cygwin funciona pero es gigantesco.
  • UnxUtils es mucho más delgado.
  • GnuWin32 es otro puerto que funciona.
  • Otra alternativa es el sistema UWIN de AT & T Research.
  • MSYS de MinGw es otra opción.
  • El Subsistema de Windows para Linux es la opción más “nativa”, pero no está instalado en Windows de manera predeterminada; Sin embargo, tiene sed , grep , etc.
  • https://github.com/mbuilov/sed-windows ofrece versiones recientes 4.3 y 4.4, que admiten la opción -z diferencia de los puertos superiores listados

Si no desea instalar nada y su sistema no es uno de Windows Server, entonces podría usar un lenguaje de scripts (VBScript, por ejemplo) para eso. Debajo hay una puñalada gruesa y fuera de lugar. Su línea de comando se vería como

 cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt 

donde oldpat y newpat son patrones de Microsoft vbscript regex . Obviamente, solo he implementado el comando sustituto y asumido algunas cosas, pero podría desarrollarse para ser más inteligente y comprender más de la línea de comandos sed .

 Dim pat, patparts, rxp, inp pat = WScript.Arguments(0) patparts = Split(pat,"/") Set rxp = new RegExp rxp.Global = True rxp.Multiline = False rxp.Pattern = patparts(1) Do While Not WScript.StdIn.AtEndOfStream inp = WScript.StdIn.ReadLine() WScript.Echo rxp.Replace(inp, patparts(2)) Loop 

UnxUtils proporciona sed para Win32, al igual que GNUWin32 .

Si no desea instalar nada (supongo que desea agregar el script a alguna solución / progtwig / etc. que se ejecutará en otras máquinas), puede intentar crear un script vbs (digamos, replace.vbs):

 Const ForReading = 1 Const ForWriting = 2 strFileName = Wscript.Arguments(0) strOldText = Wscript.Arguments(1) strNewText = Wscript.Arguments(2) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strFileName, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, strOldText, strNewText) Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) objFile.Write strNewText objFile.Close 

Y lo ejecutas así:

 cscript replace.vbs "C:\One.txt" "Robert" "Rob" 

Lo cual es similar a la versión sed proporcionada por “bill weaver”, pero creo que este es más amigable en términos de caracteres especiales (‘>

Por cierto, no escribí esto, pero no recuerdo de dónde lo saqué.

Hay Super Sed una versión mejorada de sed. Para Windows, este es un .exe independiente, destinado a ejecutarse desde la línea de comandos.

Puede instalar Cygwin ( http://www.cygwin.com/ ) y usar sed desde allí.

Pruebe fart.exe. Es una utilidad Buscar y reemplazar texto que se puede usar en progtwigs por lotes de comandos.

http://sourceforge.net/projects/fart-it/

Podrías probar Powershell. Hay comstackciones de comandos get-content y set-content que puede usar.

Yo uso Cygwin . Me encuentro con mucha gente que no se da cuenta de que si pones los binarios de Cygwin en tu RUTA, puedes utilizarlos desde dentro del shell de comandos de Windows. No tienes que ejecutar Cygwin’s Bash.

También puede consultar Servicios de Windows para Unix disponibles en Microsoft (pero solo en Professional y versiones anteriores de Windows).

 > (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt 

Este es el comportamiento de

 sed -i 's/^SourceRegexp$/DestinationString/g' file.txt 

edlin o editar

Además, hay servicios de Windows para Unix que viene con muchas herramientas de Unix para Windows. http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

Actualización 12/7/12 En Windows 2003 R2, Windows 7 y Server 2008, etc., lo anterior es reemplazado por el subsistema para aplicaciones basadas en UNIX (SUA) como un complemento. Pero debe descargar las utilidades: http://www.microsoft.com/en-us/download/details.aspx?id=2391

Puedes ver las herramientas de GNU , que proporcionan (entre otras cosas) sed en las ventanas.

Hasta donde sé, nada como sed está empaquetado con ventanas. Sin embargo, sed está disponible para Windows en varias formas diferentes, incluso como parte de Cygwin, si desea un subsistema POSIX completo o como un ejecutable nativo de Win32 si desea ejecutar simplemente sed en la línea de comando.

Sed para Windows (Proyecto GnuWin32)

Si debe ser nativo de Windows, la única otra cosa que puedo sugerir sería usar un lenguaje de scripts compatible con Windows sin complementos, como VBScript.

Cygwin funciona, pero estas utilidades también están disponibles. Solo colóquelos en su disco, coloque el directorio en su camino y tendrá muchas de sus utilidades amigables para Unix. Lighterweight en mi humilde opinión que Cygwin (aunque eso funciona igual de bien).

Hay un archivo de ayuda por lotes para Windows llamado repl.bat que tiene mucha capacidad de SED pero doesn't require any additional download o instalación doesn't require any additional download . Es un archivo de proceso por lotes híbrido que utiliza Jscript para implementar las características y, por lo tanto, es swift , y doesn't suffer from the usual poison characters del procesamiento por lotes y maneja las líneas en blanco con facilidad.

Descargar repl desde – https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

El autor es @dbenham de stack overflow y dostips.com

Otro archivo de ayuda por lotes llamado findrepl.bat brinda al usuario de Windows gran parte de la capacidad de GREP y también se basa en Jscript y también es un archivo de proceso por lotes híbrido. Comparte los beneficios de repl.bat

Descargue findrepl desde – https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

El autor es @aacini de stack overflow y dostips.com

Necesitaba una herramienta sed que funcionaba para el indicador de Windows cmd.exe. El puerto de sed de Eric Pement para un solo .exe de DOS funcionó muy bien para mí.

Está bastante bien documentado .

Esto funciona en Vista Ultimate, no estoy seguro de Pro.

sed -f archivo de nombre de comando.cmd archivo1> archivo2