Forum Programmation.shell fin de ligne spéciale

Posté par .
Tags : aucun
1
8
juin
2010
Bonjour,

J'ai passé mon après midi à chercher une solution à mon problème sans résultat alors je me suis dit que peux être une âme charitable pourrait me venir en aide.

Voilà mon problème est que je doit travailler avec un fichier qui a un drôle de format.
Sous vi je le voit intégralement en une seule ligne. avec des ^K en guise de fin de ligne ce qui n'est pas standard du tout.

Du coup le fromtodos ne peux pas m'aider sur ce coup là.

Je suspectai un format de mac mais ça ne semble pas être ça non plus !!!

J'ai bien trouvé un package "decode" mais comme je ne sais pas de quel format est mon fichier d'entrée ça ne résout toujours rien.

Donc je me suis dit tant pis je vais me faire mon script à la main et j'ai pondu ça:

cat -e $1 | sed 's/\^K/\n/g' > tmp
mv tmp $1

avec mon fichier d'entrée qui ressemble un peu à ça:
CrcyID: "EUR"^K Comment: "Chèque/77276/114"^K Piece:

J'ai mis le cat en premier pour faire apparaître les fameux ^K qui ne sont pas vu par sed.

Tout semble bien fonctionner mais, en y regardant de plus près, j'ai les accents qui sont remplacé par M-i à cause du -e du cat.

Et là j'ai beau fouiller, je ne trouve pas l'option qui va bien sur le cat afin de conserver mes accents tout en faisant apparaître les fin de lignes.

Donc si quelqu'un à la solution, je lui paie un coup.

Merci
  • # ^K => 0x0b

    Posté par . Évalué à 2.

    Tu peux vérifier ça en utilisant un éditeur hexadecimal ou "od -t x1 < ton_fichier".

    Pour la solution :
    perl -p -e 's/\x0B/\n/g' < ton_fichier
    devrait fonctionner.
    • [^] # Re: ^K => 0x0b

      Posté par . Évalué à 5.

      Et comme il semble que tr accepte les \ooo et les \n (m'en souvenais plus) tu peux aussi t'en sortir de manière moins bourrine avec tr '\013' '\n'.
      • [^] # Re: ^K => 0x0b

        Posté par . Évalué à 2.

        Super. Ça marche au poil.

        Bon faut qu'on se trouve un moment pour aller boire une pinte !
  • # ctrl+V

    Posté par (page perso) . Évalué à 4.

    Pour l'insertion "verbatim", le shell accepte normalement l'utilisation de ctrl+V (testé sous bash et zsh).
    En utilisant ctrl+V suivi de ctrl+K tu peux insérer dans ta commande sed le caractère représenté par ^K .
    • [^] # Re: ctrl+V

      Posté par (page perso) . Évalué à 3.

      Dans vi aussi.

      :s/^V^K/^V^M/g
      (bien sûr, c'est "contrôle+V" suivi de "contrôle+KouM")

      te remplacera tous tes caractères de contrôle gênants par des retours à la ligne.
      • [^] # Re: ctrl+V

        Posté par . Évalué à 1.

        merci pour toutes ces infos, je n'aurai plus de problèmes avec les caractères spéciaux maintenant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.