Formatage de fichier texte

Résolu
Bonjour,

Connaissez-vous la commande permettant de savoir si un fichier texte est au format UNIX, PC, ou MAC ?

Merci :-)
Configuration: Windows XP
Firefox 2.0.0.7

29 réponses

Résumé de la discussion

La discussion porte sur la détermination du format de fin de ligne d’un fichier texte (UNIX, PC ou MAC) et les méthodes disponibles sous Windows XP. Plusieurs propositions s’appuient sur grep pour détecter les retours chariot, cat -A pour afficher les caractères invisibles et sed pour tester ou transformer le contenu. D’autres suggèrent dos2unix pour convertir les fins de ligne et vérifient le résultat avec des commandes comme grep, stat ou awk, afin d’identifier rapidement le format. En cas d’incertitude, certaines réponses recommandent aussi l’utilisation de tests complémentaires ou de compression pour isoler l’origine d’un comportement inattendu.

Bobot (l’IA à votre service)
  1. Modérateur
    Salut,

    file fichier
    ne te conviens pas?
    0
    1. Si mais je ne connaissais pas, merci ;-)

      Et ca ne fonctionne pas exactement comme attendu:

      file index.php
      index.php: PHP script text

      Ca ne me dit pas si c'est du UNIX, MAC ou PC.

      Je me posais la question parce que les greps fonctionnent mal parfois sur des fichiers formatés PC, et du coup j'applique dos2unix dessus; mais je me demandais si'il existait une commande pour spécifier le type avant.
      0
      1. Modérateur
        Salut,

        Alors teste les fins de ligne de ton fichier avant (le "^M" s'obtient par "CTRL V + CTRL M) :
        [tmpfs]$ grep '^M' fich_DOS.txt >/dev/null
        [tmpfs]$ echo $?
        0
        
        [tmpfs]$ grep '^M' fich_UNIX.txt >/dev/null
        [tmpfs]$ echo $?
        1
        [tmpfs]$
        et traite en fonction du résultat du code retour ;-))
        0
        1. Modérateur
          Ah, d'accord
          en fait tu veux tester si la fin de ligne est
          \n - UNIX
          \r - MAC
          \n\r - WIN

          Alors tu peux faire un script pour tester la fin de ligne
          Si \n Alors UNIX
          etc.

          0
          1. Ah ben non ca ne marche pas;
            j'ai fait des tests sur des fichiers en format pc ou unix, grep '^M' fich_DOS.txt >/dev/null et $? renvoie toujours 1.
            J'ai pourtant bien vérifié puisque au format PC size=23: et après dos2unix: size=20.
            Et le grep sur \n ou \r ne renvoie rien

            :-|
            0
            1. Modérateur
              Affiche tes fichiers avec "cat -A" s'il te plait.
              0
              1. cat -A Document1.txt
                thierry^M$
                test ^M$
                ascii^M$

                dos2unix Document1.txt && cat -A Document1.txt
                thierry$
                test $
                ascii$
                0
                1. Modérateur
                  Pour les fichiers MAC, je te conseille de faire d'abord la conversion de \r en \n ou d'ajouter le \n si tu veux avoir un fichier Win
                  0
                  1. Modérateur
                    Affiche maintenant tes commandes sur tes fichiers et le résultat à l'écran, merci.
                    0
                    1. grep '^M' Document1.txt >/dev/null;echo $?
                      1
                      stat Document1.txt|grep Size|awk '{print $1$2}'
                      Size:27
                      dos2unix Document1.txt && grep '^M' Document1.txt >/dev/null;echo $?
                      1
                      stat Document1.txt|grep Size|awk '{print $1$2}'
                      Size:22
                      0
                      1. Modérateur
                        Bon concernant la taille avec "stat", essaie plutôt :
                        stat -c 'Size : %s' fichier
                        et pour en revenir à ton autre problème, affiche le résultat de :
                        cat -A Document1.txt && grep '^M' Document1.txt
                        sur le fichier formaté en DOS.
                        0
                        1. cat -A Document1.txt && grep '^M' Document1.txt
                          thierry^M$
                          test ^M$
                          ascii^M$
                          ^M$
                          ^M$

                          Etonnant !
                          0
                          1. Modérateur
                            Essaye avec "grep -E" (ou egrep), pour voir ;-\
                            0
                            1. Je viens de voir un truc intéressant mais ca utilise tr et non grep :
                              http://perso.orange.fr/gleu/absfr.tuxfamily.org/abs-2.3-fr/textproc.html
                              "Exemple 12-17. Du: Convertit les fichiers text DOS vers UNIX"

                              Et le grep ne fonctionne pas sur "\015" :-|
                              0
                              1. cat -A Document1.txt && grep -E '^M' Document1.txt ;echo $?
                                thierry^M$
                                test ^M$
                                ascii^M$
                                ^M$
                                ^M$
                                1

                                Pareil :-|
                                0
                                1. Modérateur
                                  Fais un grep sans le cat avant pour voir ce qu'il en ressort vraiment...
                                  0
                                  1. grep -E '^M' Document1.txt

                                    RIEN !
                                    0
                                    1. Modérateur
                                      Tu peux mettre ton fichier DOS sur Cjoint s'il te plaît que je teste ça chez moi pour déterminer si ça vient du fichier ou d'ailleurs, merci.
                                      0
                                      • 1
                                      • 2