windows sed cmd

windows - ¿Hay alguna utilidad sed para cmd.exe



(17)

Cygwin funciona, pero UnxUtils 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).

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.


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

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


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.

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.


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.


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 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 y dostips.com


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 .






Puedes ver las GnuWin32 , que proporcionan (entre otras cosas) sed en las ventanas.


Si no desea instalar nada (supongo que desea agregar el script a alguna solución / programa / 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é.


Yo uso http://www.cygwin.com/ . 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).




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

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


> (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