Comment trouver ligne-terminaisons dans un fichier texte?
j'essaie d'utiliser quelque chose dans bash pour me montrer les fins de ligne dans un fichier imprimé plutôt qu'interprété. Le fichier est un dump du serveur SSIS / SQL lu par une machine Linux pour traitement.
-
y a-t-il des interrupteurs à l'intérieur de
vi
,less
,more
, etc? -
en plus de voir les fins de ligne, j'ai besoin de savoir quel type de fin de ligne il s'agit (
CRLF
ouLF
). Comment puis-je le trouver?
10 réponses
vous pouvez utiliser l'utilitaire file
pour vous donner une indication du type de fin de ligne.
Unix:
$ file testfile1.txt
testfile.txt: ASCII text
"DOS":
$ file testfile2.txt
testfile2.txt: ASCII text, with CRLF line terminators
pour convertir de "DOS" en Unix:
$ dos2unix testfile2.txt
pour convertir Unix en" DOS":
$ unix2dos testfile1.txt
convertir un fichier déjà converti n'a pas d'effet, il est donc sûr d'exécuter aveuglément (i.e. sans tester le format d'abord) bien que les avertissements habituels s'appliquent, comme toujours.
Dans vi
...
:set list
pour voir les fins de ligne.
:set nolist
pour revenir à la normale.
bien que je ne pense pas que vous puissiez voir \n
ou \r\n
dans vi
, vous pouvez voir quel type de fichier il s'agit (UNIX, DOS, etc.) pour déterminer les fins de ligne...
:set ff
alternativement, de bash
vous pouvez utiliser od -t c <filename>
ou tout simplement od -c <filename>
pour afficher les retours.
dans la coquille de bash, essayez cat -v <filename>
. Cela devrait afficher les retours de chariot pour les fichiers windows.
(cela a fonctionné pour moi dans rxvt via Cygwin sur Windows XP).
note de l'Éditeur: cat -v
visualise \r
(CR) caractères. comme ^M
. Ainsi, les séquences de fin de ligne \r\n
s'afficheront comme ^M
à la fin de chaque ligne de sortie. cat -e
visualisera en outre \n
, à savoir comme $
. ( cat -et
visualisera en outre Tab chars. comme ^I
.)
Ubuntu 14.04:
simple cat -e <filename>
fonctionne très bien.
affiche les fins de ligne Unix ( \n
ou LF) comme $
et les fins de ligne Windows ( \r\n
ou CRLF) comme ^M$
.
pour indiquer CR comme ^M
en moins d'utilisation less -u
ou type - u une fois moins est ouvert.
man less
dit:
-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.
vous pouvez utiliser xxd
pour afficher un dump hexadécimal du fichier, et rechercher des caractères" 0d0a "ou" 0a".
vous pouvez utiliser cat -v <filename>
comme @warriorpostman suggère.
vous pouvez utiliser la commande todos filename
pour convertir en fins DOS, et fromdos filename
pour convertir en fins de ligne UNIX. Pour installer le paquet sur Ubuntu, tapez sudo apt-get install tofrodos
.
Essayer "fichier" - k"
je dois parfois vérifier cela pour les fichiers de certificats PEM.
le problème avec file
est celui-ci: parfois, il essaie d'être trop intelligent/trop spécifique.
essayons un petit quiz: j'ai des fichiers. Et un de ces fichiers a des fins de ligne différentes. Lequel?
" répertoires ressemble.)
essayons régulier file
:
$ 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. Il ne me dit pas la fin de la ligne. Et j'ai déjà su qu'il s'agissait de fichiers cert. Je n'avais pas besoin de" dossier " pour me le dire.
Que pouvez-vous essayer d'autre?
vous pourriez essayer dos2unix
avec le commutateur --info
comme ceci:
$ 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
So qui vous dit que: yup, "0.exemple.fin.cer" doit être l'homme étrange. Mais ce genre de fins de ligne sont là? Est-ce que vous connaissez le format de sortie dos2unix par cœur? (Je ne sais pas.)
mais heureusement il y a l'option --keep-going
(ou -k
en abrégé) dans file
:
$ file --keep-going -- *
0.example.end.cer: PEM certificate2- , ASCII text, with CRLF line terminators2- data
0.example.end.key: PEM RSA private key2- , ASCII text2- data
1.example.int.cer: PEM certificate2- , ASCII text2- data
2.example.root.cer: PEM certificate2- , ASCII text2- data
example.opensslconfig.ini: ASCII text2- data
example.req: PEM certificate request2- , ASCII text2- data
Excellent! Maintenant nous savons que notre fichier Impair a des fins de ligne DOS ( CRLF
). (Et les autres fichiers ont Unix ( LF
) les fins de ligne. Ce n'est pas explicite dans cette sortie. Elle est implicite. C'est juste la façon file
s'attend à un "régulier" fichier texte.)
(si vous voulez partager mon mnémonique:" L "Est Pour" Linux "et pour"LF".)
maintenant convertissons le coupable et réessayons:
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate2- , ASCII text2- data
0.example.end.key: PEM RSA private key2- , ASCII text2- data
1.example.int.cer: PEM certificate2- , ASCII text2- data
2.example.root.cer: PEM certificate2- , ASCII text2- data
example.opensslconfig.ini: ASCII text2- data
example.req: PEM certificate request2- , ASCII text2- data
bien. Maintenant, tous les certs ont des fins de ligne Unix.
Lire la suite
-
man file
-
man dos2unix
- Wikipédia: Saut De Ligne
vous pouvez utiliser vim -b filename
pour éditer un fichier en mode binaire, qui affichera des caractères ^M pour le retour de chariot et une nouvelle ligne est indicative de la présence de LF, indiquant les fins de ligne CRLF de Windows. Si je veux dire \n
et par CR je veux dire \r
. Notez que lorsque vous utilisez l'option-b, le fichier sera toujours édité en mode UNIX par défaut comme indiqué par [unix]
dans la ligne de statut, ce qui signifie que si vous ajoutez de nouvelles lignes, elles se termineront avec LF, pas CRLF. Si vous utilisez normal vim sans -b sur un fichier avec les fins de ligne CRLF, vous devriez voir [dos]
affiché sur la ligne d'état et les lignes insérées auront CRLF comme fin de ligne. La documentation vim pour le réglage fileformats
explique les complexités.
aussi, je n'ai pas assez de points pour commenter la réponse de Notepad++, mais si vous utilisez Notepad++ sous Windows, utilisez le menu View / Show Symbol / Show End of Line pour afficher CR et LF. Dans ce cas, LF est indiqué, tandis que pour vim, LF est indiqué. par une nouvelle ligne.
je décharge ma sortie dans un fichier texte. Je l'ouvre alors dans le bloc-notes ++ puis je clique sur le bouton Afficher tous les caractères. Pas très élégant, mais il fonctionne.