Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/04/2011, à 18:52

vichenze

[Résolu] Remplacer les \r par des \n avec sed/tr

Bonjour,

je dois modifier plusieurs fichiers édités sous Mac qui ont comme caractères de fin de ligne \r.

J'ai donc essayé de faire un

tr "\r" "\n" < test.txt

mais je ne vois toujours pas de saut de ligne.

Alors que par exemple un

echo -e "123\r456\n789" | tr "\r" "\n"

me transforme bien les \r en \n

J'ai aussi essayé avec sed, mais même résultat, point de saut de ligne \n ajouté.

Y'a-t-il une autre façon de faire ? Est ce qu'il est possible de forcer l'affichage des \r via un cat par exemple pour être sûr qu'ils sont bien là (pas trouvé) ?

Merci !

Dernière modification par vichenze (Le 03/05/2011, à 09:36)

Hors ligne

#2 Le 28/04/2011, à 19:10

FRUiT

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Tu pourrais nous coller quelques lignes d'un des fichiers en question en utilisant :

cat -A fichier_en_question

Bon c'est pour DOS (et j'ai pas de mac pour tester, d'ou la question ci-dessus) mais tu peux éventuellement essayer l'utilitaire fromdos.
(faut installer le paquet tofrodos)

Dernière modification par FRUiT (Le 28/04/2011, à 19:11)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#3 Le 28/04/2011, à 20:25

aduxas

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Selon Wikipedia, \r est l'ancienne définition de saut de ligne sur Mac (OS-9 et avant).  Ils utiliseraient \n maintenant.  C'est dan un éditeur que tu ne les vois toujours pas?

Dernière modification par aduxas (Le 28/04/2011, à 20:26)

Hors ligne

#4 Le 29/04/2011, à 09:30

vichenze

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

En fait j'ai vu ça en ouvrant le fichier avec Notepad++ sous Windows, il y a un caractère CR à la fin de chaque ligne, ce qui correspond si je ne dis pas de bêtises à un \r :

ligne1[CR]
ligne2[CR]
ligne3[CR]

Et si je fais un cat -A du fichier, on ne voit aucun saut de ligne :

$ cat -A test_win.txt
ligne1ligne2ligne3

Dernière modification par vichenze (Le 29/04/2011, à 09:31)

Hors ligne

#5 Le 29/04/2011, à 17:26

aduxas

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Bizarre:  les[CR] indiquent qu'il y a bien un caractère, mais "cat -A" ne le montre pas!  Ce n'est pas un \r, sinon tes substitutions l'auraient reconnu et "cat -A" l'aurait montré.  Vois-tu quelque chose aux endroits ou notepad mets les [CR] avec

od -c test_win.txt | more

note:  "\r" devrait montrer "^M" avec cat -A ou dans vim.

Dernière modification par aduxas (Le 29/04/2011, à 17:30)

Hors ligne

#6 Le 29/04/2011, à 21:24

aduxas

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Je viens de faire un essai avec Notepad++.  Tu as du activer l'option qui affiche tous les caractères, et les [CR] que tu mentionnes sont en fait les lettres CR en inverse vidéo.  En effet, il devrait donc y avoir un \r à cet endroit.  Reste à vérifier que le fichier que tu transformes avec tr est bien le même, sans filtration, que celui que regardes avec Notepad++?

Hors ligne

#7 Le 30/04/2011, à 11:33

FRUiT

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Et fromdos ça dit quoi ?


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#8 Le 30/04/2011, à 19:41

vince27fr

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

salut

sudo apt-get install dos2unix

t'installe le commande mac2unix qui va transformer les cr en lf après tu peux utiliser unix2dos pour transformer les lf en crlf (ou \n)


Debian Testing 64bits

Hors ligne

#9 Le 01/05/2011, à 01:04

FRUiT

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Y parait que fromdos est le successeur de dos2unix, qui lui est "deprecated"...


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#10 Le 02/05/2011, à 10:44

vichenze

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Bon alors j'ai essayé avec od et fromdos, sans succès, j'ai dans tous les cas les 3 lignes concaténées sur une seule.

Je pense avoir trouvé l'origine du problème, je transfert le fichier en FTP vers le serveur linux pour faire ces manip, et visiblement si je le transfert de l'autre sens sans l'éditer sur le serveur, il y a plus de saut de ligne non plus quand je l'ouvre en local avec Notepad...

Le transfert FTP via Filezilla me supprimerait les \r ? oO

Dernière modification par vichenze (Le 02/05/2011, à 10:44)

Hors ligne

#11 Le 02/05/2011, à 10:51

vince27fr

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

je crois que ça dépend si le transfert se fait en mode terxte ou en mode binaire... à voir ; ça fonctionne alors ?

sinon, as-tu été voir ici : http://en.wikipedia.org/wiki/Newline#Co … _utilities


Debian Testing 64bits

Hors ligne

#12 Le 03/05/2011, à 01:29

aduxas

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

Le problème s'explique probablement comme ceci.  Tu as transféré ton fichier en mode ASCI d'un système Windows vers Linux.  Par conséquent, Filezilla a pensé qu'il s'agissait d'un fichier Windows (newline = \r\n) et a appliqué la substitution des newline vers Linux (newline=\n), c'est à dire : enlever les \r.  Comme il s'agit d'un fichier Mac, les \r y étaient bien, mais il n'y avait pas de \n, ce que Filezilla n'a pas vu.  Donc, il ne reste plus rien du tout!  Comme quoi il faut se méfier des logiciels qui pensent être plus malin que les utilisateurs.  La solution est, comme vince27fr le précise, de faire le transfert en mode binaire (sans modifs).

Hors ligne

#13 Le 03/05/2011, à 09:33

vichenze

Re : [Résolu] Remplacer les \r par des \n avec sed/tr

C'était effectivement ça, en binaire je vois bien les sauts de ligne.

Merci !

Hors ligne