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 ou LF ). Comment puis-je le trouver?

201
demandé sur StackzOfZtuff 2010-08-26 00:36:06

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.

288
répondu Dennis Williamson 2010-08-25 22:00:50

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.

109
répondu Ryan Berger 2017-11-07 16:26:57

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 .)

82
répondu warriorpostman 2015-12-20 01:40:10

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$ .

71
répondu Alexander Shelemin 2016-04-06 00:47:53

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.
12
répondu P. Kucerak 2016-08-25 17:14:41

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.

10
répondu Rich 2013-09-10 16:50:08

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 .

4
répondu Zorayr 2012-10-28 22:13:06

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

3
répondu StackzOfZtuff 2017-11-22 13:28:26

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.

2
répondu smalers 2017-09-15 06:01:28

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.

0
répondu Diego 2015-10-13 18:56:52