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

        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

          :-|
          1. cat -A Document1.txt
            thierry^M$
            test ^M$
            ascii^M$

            dos2unix Document1.txt && cat -A Document1.txt
            thierry$
            test $
            ascii$
            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
              1. Modérateur
                Affiche maintenant tes commandes sur tes fichiers et le résultat à l'écran, merci.
                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
                  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.
                    1. cat -A Document1.txt && grep '^M' Document1.txt
                      thierry^M$
                      test ^M$
                      ascii^M$
                      ^M$
                      ^M$

                      Etonnant !
                      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" :-|
                        1. cat -A Document1.txt && grep -E '^M' Document1.txt ;echo $?
                          thierry^M$
                          test ^M$
                          ascii^M$
                          ^M$
                          ^M$
                          1

                          Pareil :-|
                          1. Modérateur
                            Fais un grep sans le cat avant pour voir ce qu'il en ressort vraiment...
                            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.
                              • 1
                              • 2