varios texto patrones palabra linea exacta crear como comando caracter buscar añadir archivo agregar linux bash command-line newline line-endings

linux - patrones - ¿Cómo averiguar los finales de línea en un archivo de texto?



sed añadir caracter al final de linea (10)

Prueba "file -k"

A veces tengo que revisar esto para los archivos de certificado PEM.

El problema con el file normal es el siguiente: a veces se trata de ser demasiado inteligente / demasiado específico.

Probemos un pequeño cuestionario: tengo algunos archivos. Y uno de estos archivos tiene diferentes finales de línea. ¿Cúal?

(Por cierto: este es el aspecto de uno de mis directorios típicos de "trabajo certificado").

Probemos el file regular:

$ file -- * 0.example.end.cer: PEM certificate 0.example.end.key: PEM RSA private key 1.example.int.cer: PEM certificate 2.example.root.cer: PEM certificate example.opensslconfig.ini: ASCII text example.req: PEM certificate request

Huh No me está diciendo los finales de la línea. Y ya sabía que esos eran archivos cert. No necesitaba "archivo" para decirme eso.

¿Qué más puedes probar?

Puede probar dos2unix con el interruptor --info esta manera:

$ dos2unix --info -- * 37 0 0 no_bom text 0.example.end.cer 0 27 0 no_bom text 0.example.end.key 0 28 0 no_bom text 1.example.int.cer 0 25 0 no_bom text 2.example.root.cer 0 35 0 no_bom text example.opensslconfig.ini 0 19 0 no_bom text example.req

Así que eso te dice que: yup, "0.example.end.cer" debe ser el hombre extraño. Pero, ¿qué tipo de finales de línea hay? ¿Conoces el formato de salida de dos2unix de memoria? (Yo no.)

Pero afortunadamente hay la --keep-going (o -k para abreviar) en el file :

$ file --keep-going -- * 0.example.end.cer: PEM certificate/012- , ASCII text, with CRLF line terminators/012- data 0.example.end.key: PEM RSA private key/012- , ASCII text/012- data 1.example.int.cer: PEM certificate/012- , ASCII text/012- data 2.example.root.cer: PEM certificate/012- , ASCII text/012- data example.opensslconfig.ini: ASCII text/012- data example.req: PEM certificate request/012- , ASCII text/012- data

¡Excelente! Ahora sabemos que nuestro archivo impar tiene finales de línea de DOS ( CRLF ). (Y los otros archivos tienen terminaciones de línea Unix ( LF ). Esto no está explícito en esta salida. Es implícito. Es solo la forma en que el file espera que sea un archivo de texto "normal").

(Si quieres compartir mi mnemotécnico: "L" es para "Linux" y para "LF".)

Ahora convirtamos al culpable e intentemos de nuevo:

$ dos2unix -- 0.example.end.cer $ file --keep-going -- * 0.example.end.cer: PEM certificate/012- , ASCII text/012- data 0.example.end.key: PEM RSA private key/012- , ASCII text/012- data 1.example.int.cer: PEM certificate/012- , ASCII text/012- data 2.example.root.cer: PEM certificate/012- , ASCII text/012- data example.opensslconfig.ini: ASCII text/012- data example.req: PEM certificate request/012- , ASCII text/012- data

Bueno. Ahora todos los certificados tienen terminaciones de línea Unix.

Otras lecturas

Estoy tratando de usar algo en bash para mostrarme los finales de línea en un archivo impreso en lugar de interpretado. El archivo es un volcado de SSIS / SQL Server que está siendo leído por una máquina Linux para su procesamiento.

  • ¿Hay interruptores dentro de vi , less , more , etc.?

  • Además de ver los finales de línea, necesito saber qué tipo de final de línea es ( CRLF o LF ). ¿Cómo puedo averiguar eso?


En vi ...

:set list para ver los finales de línea.

:set nolist para volver a la normalidad.

Si bien no creo que pueda ver /n o /r/n en vi , puede ver qué tipo de archivo es (UNIX, DOS, etc.) para inferir qué finales de línea tiene ...

:set ff

Alternativamente, desde bash puede usar od -tc <filename> o simplemente od -c <filename> para mostrar las declaraciones.


En el shell bash, intente cat -v <filename> . Esto debería mostrar los retornos de carro para los archivos de Windows.

(Esto me funcionó en rxvt a través de Cygwin en Windows XP).

Nota del editor: cat -v visualiza los caracteres (CR). como ^M Por lo tanto, las secuencias /r/n fin de línea se mostrarán como ^M al final de cada línea de salida. cat -e además visualizará /n , es decir, como $ . ( cat -et además visualizará caracteres de tabulación. como ^I )


Para mostrar CR como ^M en menos use less -u o escriba less -u una vez que menos esté abierto.

man less dice:

-u or --underline-special Causes backspaces and carriage returns to be treated as print- able characters; that is, they are sent to the terminal when they appear in the input.


Puede usar vim -b filename para editar un archivo en modo binario, que mostrará ^ M caracteres para el retorno de carro y una nueva línea es indicativa de que LF está presente, lo que indica los finales de línea CRLF de Windows. Por LF quiero decir /n por CR quiero decir /r . Tenga en cuenta que cuando use la opción -b, el archivo siempre se editará en el modo UNIX de manera predeterminada, como lo indica [unix] en la línea de estado, lo que significa que si agrega nuevas líneas, finalizarán con LF, no con CRLF. Si usa vim normal sin -b en un archivo con finales de línea CRLF, debería ver [dos] muestra en la línea de estado y las líneas insertadas tendrán CRLF como final de línea. La documentación de vim para la configuración de fileformats de fileformats explica las complejidades.

Además, no tengo suficientes puntos para comentar sobre la respuesta de Notepad ++, pero si usa Notepad ++ en Windows, use el menú Ver / Mostrar símbolo / Mostrar final de línea para mostrar CR y LF. En este caso, se muestra LF, mientras que para vim, el LF se indica mediante una nueva línea.


Puede usar el comando todos filename de todos filename para convertir a finales de DOS, y fromdos filename de fromdos filename para convertir a finales de línea de UNIX. Para instalar el paquete en Ubuntu, escriba sudo apt-get install tofrodos .


Puede usar la utilidad de file para darle una indicación del tipo de fin de línea.

Unix:

$ file testfile1.txt testfile.txt: ASCII text

"DOS":

$ file testfile2.txt testfile2.txt: ASCII text, with CRLF line terminators

Para convertir de "DOS" a Unix:

$ dos2unix testfile2.txt

Para convertir de Unix a "DOS":

$ unix2dos testfile1.txt

La conversión de un archivo ya convertido no tiene ningún efecto, por lo que es seguro ejecutarlo a ciegas (es decir, sin probar el formato primero), aunque las renuncias habituales se aplican, como siempre.


Puedes usar xxd para mostrar un volcado hexadecimal del archivo y buscar los caracteres "0d0a" o "0a".

Puede usar cat -v <filename> como sugiere @warriorpostman.


Ubuntu 14.04:

simple cat -e <filename> funciona bien.

Esto muestra los finales de línea Unix ( /n o LF) como $ y los finales de línea de Windows ( /r/n o CRLF) como ^M$ .


Vuelvo mi salida a un archivo de texto. Luego lo abro en notepad ++ luego hago clic en el botón Mostrar todos los caracteres. No muy elegante pero funciona.