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.html
git diff
programa.Respuestas:
Puede usar la
-b
opció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 -i
cygwin (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 -bi
ysed -i -b
trabajo,sed -ib
lo hace sin trabajo: vea la página del manual para qué (utiliza elb
como sufijo para la copia de seguridad).sed -bi 's/foo/bar/'
Puede intentar sustituir el
\n
para\r\n
al 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
sed
para ver si existe dicha opción. Tenga en cuenta que las versiones de * nixsed
no no alterar las terminaciones de línea sin que se lo indique.Otra alternativa es utilizar la
cygwin
versión de lased
cual 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 -pe
no parece tener este problema.fuente
sed -i -e 's/<img[^>]*\/>//g' *.xml
reemplaza los finales de línea por '\ n'perl -i -p -e 's/<img[^>]*\/>//g' *.xml
conserva 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
-i
modo de trabajo en mi respuesta .Descubrí que
sed-4.4.exe
desde https://github.com/mbuilov/sed-windows es pura victoria, ya que-b
modo-i
el modo-z
modo con\0
delimitadores en lugar de\n
que 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
-bi
el modo y no tiene-z
el modo en absoluto.fuente