Forum Programmation.shell Commande tr

Posté par  .
Étiquettes : aucune
0
17
avr.
2007
Bonjour,

Je souhaite transformer cette chaîne : / par celle-ci : \\\
Mais je ne m'en sort pas avec la commande tr.
Pouvez-vous m'aider ?

D'avance merci.

RV
  • # sed, c'est dien...

    Posté par  . Évalué à 3.

    J'ai essayé ça avec sed :
    $ echo \/ | sed "s#/#\\\\\\\\\\\\#g"
    qui donne le résultat attendu, mais évidement, ça n'utilise pas la commande tr.
    Je n'ai jamais utilisé cette commande, et je ne la connais pas.
    Si tu tiens absolument à l'utiliser, soit tu attends que quelqu'un de plus calé que moi sur cette commande réponde, soit tu lis la doc.
    En console, man tr et info tr sont tes amis, et si tu es sous kde, dans konqueror, les adresses man:tr et info:tr donnent les mêmes informations mais en plus "sexy".
    Voilà, en espérant que ça aide.
    • [^] # Re: sed, c'est dien...

      Posté par  . Évalué à 4.

      Hum....
      Je viens de relire le message, ma réponse, et celle d'en dessous, ainsi que la doc de tr, et comme je suis généreux, je fais part de mes réflexions sur le sujet qui nous intéresse.
      D'une, si j'ai bien compris la description faite de la commande tr, elle transforme un caractère en un autre, c'est du remplacement de un pour un.
      Ainsi, tr 'a' 'A' mettra en majuscule tous les a minuscules rencontrés.
      Mais on peut faire l'appel avec deux chaînes, comme tr 'ab' 'AB' qui transformera les a minuscules en A et les b en B.
      Comme c'est du un pour un, il ne me semble pas possible de remplacer a par AB, par exemple, avec cette commande.
      Du coup, soit la question est mal posée " / par celle-ci : \\\", soit je n'ai rien compris à la doc de tr.
      Alors, on en arrive aux deux points suivants :
      1) la question est bien posée, et il est bien question de remplacer chaque occurence d'un slash par trois anti-slash, et la commande sed que j'ai donnée ci-dessus est correcte, et on ne peut pas utiliser la commande tr pour le faire (d'après ce que j'en ai compris)
      2) la question comporte une typo, et il est question de remplacer chaque slash par un anti-slash, et là, la commande tr est appropriée (tout du moins, autant que d'utiliser sed, mais bon, ce n'est pas le sujet).
      A ce moment là, la commande tr suivante : "tr '/' '\\'" donne bien le résultat escompté.
      Voilà, j'espère n'avoir pas dit trop de clowneries, et que mes propos éclaircissent un peu le débat.
  • # il faut "backslasher" les caractères spéciaux

    Posté par  . Évalué à 2.

    tr '\/' '\\\\\\' fait le remplacement
    • [^] # Re: il faut "backslasher" les caractères spéciaux

      Posté par  . Évalué à 2.

      je me réponds car d'une, ma solution ne fonctionne pas et de deux je pense que tr ne peut pas faire ce que tu aimerais qu'il(elle) fasse.
      Donc, comme mentionné ci-dessus: voir avec sed (ou perl )
  • # OK pour utilisation du sed

    Posté par  . Évalué à 2.

    La question est bonne. Il est donc logique que je ne m'en sorte pas avec un tr.
    Je n'avais pas compris que cette commande concerné uniquement le traitement sur le même nombre de caractères.
    Je vais donc utiliser la solution du sed.
    Merci pour votre aide.

    Hervé

Suivre le flux des commentaires

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