setup que windows sed

windows - que - sed cmd



Preservar los finales de lĂ­nea (5)

Alternativamente, (la versión cygwin de) perl -pe no parece tener este problema.

Ejecuto sed para hacer algunas sustituciones en Windows y noté que convierte automáticamente las terminaciones de línea a Unix (/ n). ¿Hay alguna opción para decirle a sed que use los finales de línea de Windows (/ r / n) o incluso mejor para preservar los finales de línea del archivo?

Nota: Utilizo sed de unxutils: http://unxutils.sourceforge.net/


Descubrí que sed-4.4.exe de https://github.com/mbuilov/sed-windows es pura victoria ya que

  • usa las terminaciones de línea CRLF de Windows en modo predeterminado
  • conserva terminaciones de línea originales en modo -b
  • funciona correctamente con el modo -i en el lugar
  • también ofrece el modo -z con /0 delimeters en lugar de /n que a veces también puede ser útil

Vea también la lista de opciones sed y la lista de todos los puertos sed de ventanas .

Tenga en cuenta que gnuwin32 sed 4.2.1 corrompe los finales de línea en el modo -bi y no tiene el modo -z en absoluto.


Podría tratar de sub /n para /r/n al final de su script existente de la siguiente manera:

sed ''s/foo/bar/;s/$//r/''

o quizás

sed -e ''s/foo/bar/'' -e ''s/$//r/''

Si ninguno de los dos anteriores funciona, deberá consultar la página de manual específica de su versión de sed para ver si existe tal opción. Tenga en cuenta que las versiones * nix de sed no alteran los terminadores de línea sin que se lo indiquen.

Otra alternativa es usar la versión cygwin de sed que no debería tener este comportamiento indeseable.


Puede usar la opción -b para sed para que trate el archivo como binario. Esto solucionará el problema con cygwin''s sed en Windows.

Ejemplo: sed -b ''s/foo/bar/''

Si desea hacer coincidir el final de la línea, recuerde hacer coincidir, capturar y copiar el retorno de carro opcional.

Ejemplo: sed -b ''s/foo/(/r/?/)$/bar/1/''

De la página del hombre sed :

-b --binary

Esta opción está disponible en todas las plataformas, pero solo es efectiva cuando el sistema operativo hace una distinción entre archivos de texto y archivos binarios. Cuando se hace tal distinción, como es el caso de MS-DOS, Windows, los archivos de texto de Cygwin se componen de líneas separadas por un retorno de carro y un carácter de avance de línea, y sed no ve la CR final. Cuando se especifica esta opción, sed abrirá los archivos de entrada en modo binario, por lo que no solicitará este procesamiento especial y considerará que las líneas terminen en un avance de línea.


Se puede suprimir Gnuwin para estropear las nuevas líneas (win-> unix) si solo especificas el modificador -b y redirige. Usar el modificador -i (en línea) lo arruinará.

Eg sed.exe -b "s / / xFF / xFE //" c: / temp / in.csv> c: / temp / out.csv