comment vérifier en fin de ligne d'un fichier texte pour voir si c'est unix ou dos format?
J'ai besoin de convertir le fichier texte au format dos (en terminant chaque ligne avec 0x0d0x0a
, plutôt que de 0x0a
seulement), si le fichier est au format unix (0x0a
seulement à la fin de chaque ligne).
Je sais comment faire pour le convertir (sed 's/$/^M/'
), mais n'est pas de savoir comment détecter la fin-de-ligne de caractère(s) d'un fichier.
Je suis à l'aide de ksh.
Toute aide serait appréciée.
[Mise à jour]:
Genre de pensé à elle, et voici mon script ksh pour faire le chèque.
[qiangxu@host:/my/folder]# cat eol_check.ksh
#!/usr/bin/ksh
if ! head -1 $1 |grep ^M$ >/dev/null 2>&1; then
echo UNIX
else
echo DOS
fi
Dans le script ci-dessus, ^M
doit être inséré dans le vi
avec Ctrl-V
et Ctrl-M
.
Veux savoir si il y a une meilleure méthode.
OriginalL'auteur Qiang Xu | 2013-08-06
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur tue
Simplement utiliser le
file
de commande.Si le fichier contient des lignes avec
CR LF
à la fin, c'est imprimée par un commentaire:'Texte ASCII, avec CRLF ligne terminator.
par exemple
test.txt: ascii text
, quel que soit le type de fin de ligne est utilisé danstest.txt
. Il ne m'en dit pas si CRLF est contenue ou non.OriginalL'auteur tue
La dernière (7.1) de la version de la dos2unix (et unix2dos) de commande qui s'installe avec Cygwin et certaines distributions Linux récentes a une pratique --info option qui affiche un nombre de différents types de saut de ligne dans chaque fichier. C'est dos2unix 7.1 (2014-10-06) http://waterlan.home.xs4all.nl/dos2unix.html
À partir de la page de man:
Ainsi:
À l'inverse:
OriginalL'auteur Ed Randall
Je ne peux pas tester sur AIX, mais essayez:
OriginalL'auteur glenn jackman
Vous pouvez simplement retirer tous les retours chariot de toutes les lignes, puis ajoutez le retour chariot à la fin de toutes les lignes. Ensuite, il n'a pas d'importance ce que le format du fichier entrant. Les sortants format sera toujours format DOS.
\r
ne fonctionne pas. Il doit être remplacé par^M
(Ctrl-V
etCtrl-M
sousvi
's en mode insertion). Encore, je ne veux pas le faire tout le chemin. N'est-il pas un moyen de vérifier le fin-de-ligne de caractères d'un fichier txt?Je ne suis pas un utilisateur régulier de sed, et de plus je suis un gars Windows, donc je ne suis pas sûr. Mais je crois que vous auriez besoin de regex look-derrière la fonction, et je ne pense pas que sed prend en charge cette fonctionnalité.
OriginalL'auteur dbenham
Je suis probablement en retard sur ce point, mais j'ai eu le même problème et je n'ai pas envie de mettre la spéciale
^M
personnage dans mon script (je suis inquiet de certains éditeurs pourraient ne pas afficher le caractère spécial correctement ou, plus tard, certains programmeur peut le remplacer par 2 caractères normaux: ^ et M...).La solution que j'ai trouvé alimente le caractère spécial de grep, en laissant la coquille convertir sa valeur hexadécimale:
malheureusement je ne peut pas faire la
$'[\x0D]'
la construction d'un projet en ksh.En ksh, j'ai trouvé ceci:
si le chef -1 ${nom de fichier} | od -x | grep '0d0a$" >/dev/null
alors
echo "Gagner"
d'autre
echo "Unix"
fi
od -x
affiche le texte en codes hex.'0d0a$'
est le code hexadécimal pour CR-LF (le DOS-Gagner de terminaison de ligne). Unix terminaison de ligne est'0a00$'
OriginalL'auteur fabio