Forum Programmation.shell cut sur chaine en commencant par la fin

Posté par .
Tags : aucun
2
10
avr.
2009
Bonjour ,
voici mon probleme.

Je dois cutter cette variable
7845124512200904091025.pdf de façon à récupérer
la chaine 20090409

Il faut que je commence impérativement par la fin car la chaine avant 2009 ..
est variable.
Pourriez vous m'aider, je galère un peu

Merci d'avance
  • # egrep

    Posté par . Évalué à 3.

    echo 7845124512200904091025.pdf | egrep -o 2009.{4}

    egrep permet d'utiliser les expresisons rationnelles
    -o ne va sortir que la partie trouvée et non toute la ligne
    2009.{4} recupère la chaine à partir de 2009 et les 4 caractères qui suivent
    Bien sur ça ne marchera plus en 2010
    • [^] # egrep

      Posté par . Évalué à 1.

      Merci

      Effectivement ca ne marchera pas à chaque changement d'année.
    • [^] # Re: egrep

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

      Mais il ne faudrait pas qu'il y ait déjà un 2009 dans la chaîne variable avant le 2009 de la date...
      • [^] # Re: egrep

        Posté par . Évalué à 1.

        egrep -o 2009.{4}\.pdf$

        en supposant que les fichiers soient tous des pdf
  • # Inverser le texte

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

    En supposant que la chaîne après la date ne soit pas variable (à vue de nez il semble que se soit l'heure et les minutes).

    Une solution possible : utiliser un petit bout de script Sed pour inverser le texte, et lancer la commande cut par la suite.

    http://sed.sourceforge.net/grabbag/scripts/revchr_1.sed

    Et ré-inverser le texte après pour retomber sur tes pattes.

    Tiens une nouvelle fonction sur LinuxFr ? : "1 réponse postée entre le moment où vous avez demandé le contenu et votre réponse". C'est bien ça.
    • [^] # Re: Inverser le texte

      Posté par . Évalué à 4.

      Il y a directement la commande rev pour inverser le texte.
      • [^] # Re: Inverser le texte

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

        Merci ! Je n'arrivais pas à retrouver la commande...

        Et du coup j'ai retrouvé l'équivalent en Sed (m'enfin bon, c'eut pu être pire et être en Perl).
  • # Directement en bash

    Posté par . Évalué à 5.

    st=7845124512200904091025.pdf
    echo ${st:$((${#st}-16)):8}

    ${#st} te donne la longueur de la chaine
    $((${#st}-16)) remonte de 16 positions dans la chaine...

    plus de détail là : http://tldp.org/LDP/abs/html/string-manipulation.html .

    A vérifier si tu utilises un autre shell


    Guilhelm
    • [^] # Re: Directement en bash

      Posté par . Évalué à 0.

      ou

      STR="7845124512200904091025.pdf"
      LENGTH=`echo $STR | wc -c`
      echo $STR | cut -c $((-16+$LENGTH))- | cut -c 1-8
    • [^] # Re: Directement en bash

      Posté par . Évalué à 2.

      à noter que les "marqueurs" d'évaluation arithmétique ne sont pas indispensables :
      st=7845124512200904091025.pdf
      echo ${st:${#st}-16:8}
      fonctionne aussi bien...
  • # Ou tu peux utiliser sed

    Posté par . Évalué à 2.

    Bonjour,

    Tu peux essayer avec sed

    TAVAR=7845124512200904091025.pdf
    echo $TAVAR | sed "s/^.*\(........\)....\.pdf$/\1/"


    Toujours valide quelque soit l'année ...
  • # cut sur chaine en commencant par la fin

    Posté par . Évalué à 1.

    Merci a tous!

    Je vais bien avancer avec Ca !!!
  • # awk

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

    awk doit pouvoir le faire aussi avec un substr ou qqchose comme ca


    http://www.shellunix.com/awk.html

    a+

    je plussoie et je paie ma tournée !!!!

Suivre le flux des commentaires

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