Pregunta

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

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

¿Fue útil?

Solución

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 Entrada del blog de Zain Naboulsis.

Otros consejos

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

Si no desea instalar nada y su sistema no es Windows Server, entonces podría use un lenguaje de secuencias de comandos (VBScript, por ejemplo) para eso.A continuación se muestra una puñalada grosera e improvisada.Su línea de comando se vería así

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

donde están el viejo y el nuevo Patrones de expresiones regulares de Microsoft vbscript.Obviamente solo implementé el comando sustituto y asumí algunas cosas, pero podrías desarrollarlo para ser más inteligente y comprender más sed línea de comando.

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/programa/etc. que se ejecutará en otras máquinas), puede intentar crear un script vbs (digamos, reemplazar.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"

Que es similar a la versión sed proporcionada por "bill weaver", pero creo que esta es más amigable en términos de caracteres especiales (' > < / ).

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

Hay Súper Sed una versión mejorada de sed.Para Windows, este es un .exe independiente, diseñado para ejecutarse desde la línea de comandos.

Pruebe pedo.exe.Es una utilidad para buscar y reemplazar texto que se puede utilizar en programas por lotes de comandos.

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

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

Podrías instalar Cygwin (http://www.cygwin.com/) y use sed desde allí.

Podrías probar powershell.Hay obtener el contenido y establecer contenido Commandlets integrados que podrías usar.

yo suelo Cygwin.Me encuentro con mucha gente que no se da cuenta de que si coloca los binarios de Cygwin en su RUTA, puede usarlos desde el shell de comandos de Windows.No es necesario ejecutar Cygwin's Bash.

También podrías investigar Servicios de Windows para Unix disponible en Microsoft (pero sólo en las versiones Professional y superiores de Windows).

edlin o editar

Además, existen servicios de Windows para Unix que vienen 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 se reemplaza por el Subsistema para Aplicaciones Basadas en UNIX (SUA) como complemento.Pero tienes que descargar las utilidades:http://www.microsoft.com/en-us/download/details.aspx?id=2391

Podrías mirar Herramientas GNU, proporcionan (entre otras cosas) sed en Windows.

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

Descargar repl de - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

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

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

Descargar findrepl de - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

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

Hasta donde yo sé, nada como sed viene incluido con Windows.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 solo sed en la línea de comando.

Sed para Windows (Proyecto GnuWin32)

Si necesita ser nativo de Windows, lo único que puedo sugerir es utilizar un lenguaje de programación compatible con Windows sin complementos, como VBScript.

Cygwin funciona, pero estos Los servicios públicos también están disponibles.Simplemente colóquelos en su disco, coloque el directorio en su ruta y tendrá muchas de sus amigables utilidades Unix.En mi humilde opinión, es más liviano que Cygwin (aunque funciona igual de bien).

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

esta bastante bien documentado.

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

sed -f commandfilename.cmd file1 > file2
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top