51 votes

Comment déterminer la fin de ligne d'un fichier

J'ai un tas (des centaines) de fichiers qui sont censés avoir des fins de ligne Unix. Je soupçonne fortement que certains d'entre eux ont des terminaisons de ligne Windows, et je veux déterminer par programme ceux qui en ont.

Je sais que je peux juste courir

 flip -u 
ou quelque chose de similaire dans un script pour tout convertir, mais je veux pouvoir identifier les fichiers qui doivent être modifiés en premier.

69voto

Adam Rosenfield Points 176408

Vous pouvez utiliser l'outil file , qui vous indiquera le type de fin de ligne. Ou, vous pouvez simplement utiliser dos2unix -U qui convertira tout en fins de ligne Unix, quel que soit le début.

28voto

stimms Points 14986

Vous pouvez utiliser grep

 egrep -l $'\r'\$ *
 

14voto

joachim Points 1924

Quelque chose dans le sens de:

 perl -p -e 's[\r\n][WIN\n]; s[(?<!WIN)\n][UNIX\n]; s[\r][MAC\n];' FILENAME
 

bien que certaines de ces expressions rationnelles puissent nécessiter un raffinement et un rangement.

Cela produira votre fichier avec WIN, MAC ou UNIX à la fin de chaque ligne. Bien si votre fichier est en quelque sorte un gâchis terrible (ou un diff) et a des fins mixtes.

2voto

Adam Davis Points 47683

Unix utilise un octet, 0x0A (LineFeed), tandis que Windows utilise deux octets, 0x0D 0x0A (Carriage Return, Line feed).

Si vous ne voyez jamais un 0x0D, alors c'est très probablement Unix. Si vous voyez des paires 0x0D 0x0A, c'est très probablement MSDOS.

0voto

TcKs Points 13249

Windows utilise les caractères 13 et 10 pour la fin de ligne, unix un seul d'entre eux (je ne me souviens pas lequel). Vous pouvez donc remplacer les caractères 13 et 10 par les caractères 13 ou 10 (celui qui utilise Unix).

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