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
-
man file
-
man dos2unix
- Wikipedia: Newline
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
oLF
). ¿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.