Ejecuté sed para hacer una sustitución en Windows y noté que convierte automáticamente los finales de línea a Unix (\ n). ¿Existe una 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: uso sed de unxutils: http://unxutils.sourceforge.net/

LC_ALL=C perl -i -e 'binmode $STDIN;undef $/;$_=<>;s|http://911coned.com|https://911coned.com|gm;print' education.htmlgit diffprograma.Respuestas:
Puede usar la
-bopción de sed para que trate el archivo como binario. Esto solucionará el problema con sed de cygwin 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/'Desde la página man de sed :
fuente
sed -icygwin (para mí), pero puede solucionarlo. Gracias por la actualización: las otras respuestas fueron la última palabra sobre este tema durante un tiempo.sed -i: es importante cómo escribirlo. Mientrassed -biysed -i -btrabajo,sed -iblo hace sin trabajo: vea la página del manual para qué (utiliza elbcomo sufijo para la copia de seguridad).sed -bi 's/foo/bar/'Puede intentar sustituir el
\npara\r\nal final de su script existente de esta manera:o quizás
Si ninguno de los dos anteriores funciona, tendrá que consultar la página de manual específica de su versión de
sedpara ver si existe dicha opción. Tenga en cuenta que las versiones de * nixsedno no alterar las terminaciones de línea sin que se lo indique.Otra alternativa es utilizar la
cygwinversión de lasedcual no debería tener este comportamiento indeseable.fuente
0x0A) y \ r \ n (0x0D 0x0A), esta solución propuesta (de volver a inyectar siempre el \ r) lo rompe.Alternativamente, (la versión cygwin de)
perl -peno parece tener este problema.fuente
sed -i -e 's/<img[^>]*\/>//g' *.xmlreemplaza los finales de línea por '\ n'perl -i -p -e 's/<img[^>]*\/>//g' *.xmlconserva los finales de línea originalesGnuwin se puede suprimir para estropear las nuevas líneas (win-> unix) si solo especifica el modificador -b y redirecciona. Usar el interruptor -i (en línea) lo estropeará.
Por ejemplo, sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
fuente
-imodo de trabajo en mi respuesta .Descubrí que
sed-4.4.exedesde https://github.com/mbuilov/sed-windows es pura victoria, ya que-bmodo-iel modo-zmodo con\0delimitadores en lugar de\nque a veces también puede ser útilConsulte también la lista de opciones sed y la lista de todos los puertos sed de Windows .
Tenga en cuenta que GnuWin32 sed 4.2.1 hace finales de línea corruptos en
-biel modo y no tiene-zel modo en absoluto.fuente