422 votes

Comment trouver les fins de ligne dans un fichier texte ?

J'essaie d'utiliser quelque chose en bash pour me montrer les fins de ligne dans un fichier imprimé plutôt qu'interprété. Le fichier est un dump de SSIS/SQL Server qui est lu par une machine Linux pour être traité.

  • Y a-t-il des interrupteurs dans vi , less , more etc.

  • En plus de voir les fins de ligne, j'ai besoin de savoir de quel type de fin de ligne il s'agit ( CRLF o LF ). Comment puis-je le savoir ?

1 votes

Conseil général : Si vous avez une idée de la commande *nix/cygwin que vous pourriez utiliser, vous pouvez toujours consulter sa page de manuel pour rechercher les commutateurs qui pourraient vous donner la fonctionnalité dont vous avez besoin. Par exemple, man less .

539voto

Dennis Williamson Points 105818

Vous pouvez utiliser le 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 passer de "DOS" à Unix :

$ dos2unix testfile2.txt

Pour passer d'Unix à "DOS" :

$ unix2dos testfile1.txt

La conversion d'un fichier déjà converti n'a aucun effet. Vous pouvez donc l'exécuter en aveugle (c'est-à-dire sans tester le format au préalable), mais les avertissements habituels s'appliquent, comme toujours.

9 votes

Ils sont maintenant parfois nommés respectivement "fromdos" et "todos" (comme c'est le cas dans Ubuntu 10.4+).

5 votes

@JessChadwick : Oui, mais seulement si vous installez explicitement l'option tofrodos paquet avec sudo apt-get install tofrodos - tout comme vous devriez courir sudo apt-get install dos2unix pour obtenir dos2unix y unix2dos .

0 votes

En fait, dos2unix ne peut pas faire tout le travail, je pense stackoverflow.com/questions/23828554/dos2unix-doesnt-convert-m donne la meilleure réponse

145voto

Ryan Berger Points 4721

Sur 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 o \r\n en vi vous pouvez voir de quel type de fichier il s'agit (UNIX, DOS, etc.) pour en déduire les fins de lignes qu'il comporte...

:set ff

Ou bien, à partir de bash vous pouvez utiliser od -t c <filename> ou simplement od -c <filename> pour afficher les retours.

0 votes

Merci - cela a en effet fonctionné - maintenant j'essaie de dire si c'est un \n o \r\n Y a-t-il un interrupteur supplémentaire pour cela dans Vi ?

30 votes

Malheureusement, je ne pense pas que vi puisse afficher ces caractères spécifiques. Vous pouvez essayer od -c <nom du fichier> qui, je crois, affichera \n o \r\n.

3 votes

Dans la catégorie "pour ce que ça vaut", vous pouvez rechercher les CRLF de style Dos en tapant grep --regex="^M" où ^M est CTRL+V CTRL+M. Vous pouvez les supprimer en les remplaçant par une commande sed. Ceci fait essentiellement la même chose que dos2unix

114voto

warriorpostman Points 712

Dans le shell 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) chars. comme ^M . Ainsi, la fin de la ligne \r\n Les séquences s'afficheront comme suit ^M à la fin de chaque ligne de sortie. cat -e visualisera en plus \n à savoir $ . ( cat -et visualisera en plus les caractères de tabulation. comme ^I .)

3 votes

@ChrisK : Essayez echo -e 'abc\ndef\r\n' | cat -v et vous devriez voir un ^M après le "def".

0 votes

Je voulais voir si le fichier avait ^M(Windows/DOS EOL) et seul cat -v me l'a montré. +1 pour cela

2 votes

^M = style DOS/Windows

9voto

Rich Points 1870

Vous pouvez utiliser xxd pour afficher un vidage hexagonal du fichier, et rechercher les caractères "0d0a" ou "0a".

Vous pouvez utiliser cat -v <filename> comme le suggère @warriorpostman.

1 votes

Cela fonctionne pour moi avec cat v 8.23. Les fins de ligne Unix n'affichent pas d'informations supplémentaires, mais les fins de ligne DOS affichent un "^M".

0 votes

C'est sans doute ce que je rencontre avec la version 8.21, étant donné que j'utilise des terminaisons de ligne unix.

5voto

Zorayr Points 2637

Vous pouvez utiliser la commande todos filename pour convertir les terminaisons DOS, et fromdos filename pour convertir les terminaisons de ligne UNIX. Pour installer le paquet sur Ubuntu, tapez sudo apt-get install tofrodos .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X