¿Existe alguna utilidad sed like para cmd.exe? [cerrado]
149
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 nativo útil en Windows?
¿Qué quieres decir con "nativo"? ¿Instalable para trabajar en cmd.exe, o para trabajar sin instalación alguna? Si es lo primero, vea GnuWin32 ref'd abajo; si este último, no. No hay sed nativos preinstalados para Windows.
Michael Paulukonis
66
Por nativo me refería a la solución que se ejecuta en todas las ventanas sin instalar cosas adicionales.
Además: si quieres llamarlo desde cmd normal, solo @powershell -Command "get-content ...". La única advertencia es que debe escapar de las comillas: ... -Command "get-content ... \" expression \ ", ..."
Tarc
1
@Tarc AFAIR, puede usar comillas simples en su comando y usar comillas dobles para citar el comando en su lugar
2
Intenté esto hoy en un archivo para eliminar algunas cosas entre comillas en ciertos lugares, solo para descubrir que la salida era un archivo casi dos veces más grande que el original. La razón parece ser que este método cambió la forma en que se manejaron las nuevas líneas en el archivo para usar "\ r \ n" en lugar de "\ n".
user132278
1
Duplicar debido a \ r \ n implicaría que su archivo estaba compuesto únicamente de nuevas líneas. Aquí está la verdadera razón: la codificación .
El subsistema de Windows para Linux es una opción muy "nativa", pero no está instalada en Windows de manera predeterminada; tiene sed, grepetc. fuera de la caja, sin embargo.
Si no desea instalar nada y su sistema no es de Windows Server, entonces puede usar un lenguaje de script (VBScript, por ejemplo) para eso. A continuación se muestra una puñalada asquerosa. Tu línea de comando se vería así
donde oldpat y newpat son patrones vgecript regex de Microsoft . Obviamente, solo implementé el comando sustituto y asumí algunas cosas, pero podría desarrollarlo para ser más inteligente y comprender más la sedlínea de comandos.
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
Esto no es exactamente lo que quiero, sin embargo, creo que la dependencia de VBS es la solución más ligera.
Jakub Šturc
77
GnuWin32 es una solución nativa, si por nativo quiere decir diseñado para ejecutarse en el entorno de Windows "normal" (a diferencia de CygWin). Pruébelos y comenzará a esperar que estén en CADA sistema de Windows que use. !!!
Michael Paulukonis
3
¡Funciona para mi caso! Además, no olvide la opción cscript "// NoLogo".
Marko Dumic
44
Si esto es "fuera de lugar", ¡pregúntese cómo se ve su otro código! Increíble, gracias.
Sabuncu
2
Una utilidad similar de búsqueda y reemplazo de expresiones regulares se puede hacer con JScript. La ventaja de JScript sobre VBScript es que se puede combinar fácilmente con un lote en un solo script, lo que hace que la utilidad sea más fácil de usar en un contexto de lote o línea de comando. Está disponible una robusta utilidad híbrida JScript / batch llamada REPL.BAT . Tiene muchas opciones de línea de comando. La documentación completa está incrustada en el script. Ciertamente no tiene plena capacidad sed, pero aun así, es bastante potente.
Si no desea instalar nada (supongo que desea agregar el script en alguna solución / programa / etc que se ejecutará en otras máquinas), puede intentar crear un script vbs (digamos, replace.vbs):
Esas son probablemente las dos cosas en PowerShell que contribuyen menos a lo que sedhace ;-). El -replaceoperador es probablemente una mejor sugerencia.
Joey
7
Prueba fart.exe. Es una utilidad de Buscar y reemplazar texto que se puede usar en los programas por lotes de comandos.
Yo uso Cygwin . Me encuentro con muchas personas que no se dan cuenta de que si pones los binarios de Cygwin en tu RUTA, puedes usarlos desde el shell de comandos de Windows. No tiene que ejecutar Cygwin's Bash.
También puede consultar los Servicios de Windows para Unix disponibles de Microsoft (pero solo en las versiones Professional y superior de Windows).
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 un complemento. Pero debe descargar las utilidades:
http://www.microsoft.com/en-us/download/details.aspx?id=2391
Hay un archivo por lotes auxiliar para Windows llamado repl.batque tiene mucha de la capacidad de SED pero doesn't require any additional downloado instalación. Es un archivo por lotes híbrido que se utiliza Jscriptpara implementar las características y así es swift, y doesn't suffer from the usual poison charactersde procesamiento por lotes y maneja líneas en blanco con facilidad.
El autor es @dbenham de desbordamiento de pila y dostips.com
Otro archivo por lotes auxiliar llamado findrepl.batofrece al usuario de Windows gran parte de la capacidad GREPy también se basa en Jscriptun archivo por lotes híbrido. Comparte los beneficios de repl.bat
El enlace de Dropbox para repl está inactivo. ¿Tienes un enlace secundario?
Vishal Anand
2
Hasta donde yo sé, nada como sed está incluido en las 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 Win32 si desea ejecutar solo sed en la línea de comandos.
Si necesita ser nativo de Windows, la única otra cosa que puedo sugerir sería usar un lenguaje de secuencias de comandos compatible con Windows sin complementos, como VBScript.
Cygwin funciona, pero estas utilidades también están disponibles. Simplemente póngalos en su disco, coloque el directorio en su camino y tendrá muchas de sus amigables utilidades de Unix. En mi humilde opinión, Cygwin (aunque eso funciona igual de bien).
La pregunta es sobre Windows (cmd.exe) no sobre DOS
a_horse_with_no_name
@royhowie: Ya veo. Aunque algunas de estas respuestas pueden ser útiles para alguien, estoy de acuerdo en que la pregunta en sí no es realmente adecuada para SO. OTOH, no me siento calificado para recomendar la eliminación total.
PM 2Ring
En esta situación, creo que sería difícil incluir las partes esenciales de la respuesta, ya que la parte esencial es un archivo .exe alojado en la página vinculada. Entiendo totalmente la preocupación por la rotura de enlaces, no estoy seguro de cómo podría hacer que esto sea autónomo para SO.
bryan kennedy
Gracias por la captura, a_horse_with_no_name. Estaba siendo descuidado con mi idioma. Edité mi comentario para solucionar el problema que usted señaló.
Respuestas:
Hoy PowerShell me salvó.
Porque
grep
hay:o
y porque
sed
hay:Para más detalles ver la entrada del blog Zain Naboulsis .
fuente
sed
(y sus características) están contenidos en varios paquetes de comandos de Unix.sed
,grep
etc. fuera de la caja, sin embargo.-z
opciones a diferencia de los puertos superiores enumeradosSi no desea instalar nada y su sistema no es de Windows Server, entonces puede usar un lenguaje de script (VBScript, por ejemplo) para eso. A continuación se muestra una puñalada asquerosa. Tu línea de comando se vería así
donde oldpat y newpat son patrones vgecript regex de Microsoft . Obviamente, solo implementé el comando sustituto y asumí algunas cosas, pero podría desarrollarlo para ser más inteligente y comprender más la
sed
línea de comandos.fuente
UnxUtils proporciona sed para Win32, al igual que GNUWin32 .
fuente
Si no desea instalar nada (supongo que desea agregar el script en alguna solución / programa / etc que se ejecutará en otras máquinas), puede intentar crear un script vbs (digamos, replace.vbs):
Y lo ejecutas así:
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 obtuve.
fuente
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.
fuente
Este es el comportamiento de
fuente
Podrías probar PowerShell. Hay compilaciones de comandos get-content y set-content que puedes usar.
fuente
sed
hace ;-). El-replace
operador es probablemente una mejor sugerencia.Prueba fart.exe. Es una utilidad de Buscar y reemplazar texto que se puede usar en los programas por lotes de comandos.
http://sourceforge.net/projects/fart-it/
fuente
Puede instalar Cygwin ( http://www.cygwin.com/ ) y usar sed desde allí.
fuente
Yo uso Cygwin . Me encuentro con muchas personas que no se dan cuenta de que si pones los binarios de Cygwin en tu RUTA, puedes usarlos desde el shell de comandos de Windows. No tiene que ejecutar Cygwin's Bash.
También puede consultar los Servicios de Windows para Unix disponibles de Microsoft (pero solo en las versiones Professional y superior de Windows).
fuente
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 se reemplaza 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
fuente
Puede ver las herramientas GNU , que proporcionan (entre otras cosas) sed en las ventanas.
fuente
Hay un archivo por lotes auxiliar para Windows llamado
repl.bat
que tiene mucha de la capacidad de SED perodoesn't require any additional download
o instalación. Es un archivo por lotes híbrido que se utilizaJscript
para implementar las características y así esswift
, ydoesn't suffer from the usual poison characters
de procesamiento por lotes y maneja líneas en blanco con facilidad.Descargar
repl
desde - https://www.dropbox.com/s/qidqwztmetbvklt/repl.batEl autor es @dbenham de desbordamiento de pila y dostips.com
Otro archivo por lotes auxiliar llamado
findrepl.bat
ofrece al usuario de Windows gran parte de la capacidadGREP
y también se basa enJscript
un archivo por lotes híbrido. Comparte los beneficios de repl.batDescargar
findrepl
desde - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.batEl autor es @aacini de stack overflow y dostips.com
fuente
Hasta donde yo sé, nada como sed está incluido en las 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 Win32 si desea ejecutar solo sed en la línea de comandos.
Sed para Windows (Proyecto GnuWin32)
Si necesita ser nativo de Windows, la única otra cosa que puedo sugerir sería usar un lenguaje de secuencias de comandos compatible con Windows sin complementos, como VBScript.
fuente
Cygwin funciona, pero estas utilidades también están disponibles. Simplemente póngalos en su disco, coloque el directorio en su camino y tendrá muchas de sus amigables utilidades de Unix. En mi humilde opinión, Cygwin (aunque eso funciona igual de bien).
fuente
Necesitaba una herramienta sed que funcionara para el indicador cmd.exe de Windows. El puerto de Eric Pement de sed a un único .exe de DOS funcionó muy bien para mí.
Está bastante bien documentado .
fuente