Bash : expressions régulières et expressions rationnelles

Bonjour,
j’ai un peu de mal avec les dites expressions … je voudrai formater une chaine de caractère ou un paragraphe , mettons :

[quote]20:mis à jour
45:mis à jour
mis à jour
[/quote]
en [quote]20 45[/quote]
c’est à dire remplacer/supprimer :

  • les carctères de ponctuation (":" ici)
  • tous caractères autres que numérique
  • tous retour à la ligne
  • éventuellement toute succession de plus d’un espace en un espace unique.

cela en utilisant le moins de tubes possible … vous pouvez me donner un exemple détaillé ?

partons du principe que tu veux ne récupèrer que les chiffres dans un fichier fic, et que le nombre d’espace qui les sépare ne t’importe pas, ça me semblait plutôt simple avec une commande awk caractère par caractère de remplacer tous les non numérique par des blancs:

Bon, mais ça marche pas, et je ne sais pas pkoi.
Mais ça doit poas être loin quand même :laughing:

merci Matt, mais partons plutôt d’une chaine de caractère … d’une variable, non du contenu d’un fichier (quoique on peut mettre le contenu dans une variable, mais collons au plus proche du point de départ stp, plus clair pour moi …). Bon voilà ma solution, qui est pas belle, lourde, et qui me gave :

point de départ, j’ai une variable RESULT qui vaut :

[quote]20:mis à jour
45:mis à jour
mis à jour[/quote]
Si dans mon code, je fais : RESULT=`echo "$RESULT" | sed s/[:alpha:]//g | sed s/[a-z]//g` j’obtiens :

[quote=“echo $RESULT”]20
45

[/quote]
puis : RESULT=${RESULT// /' '} j’obtiens :

puis : RESULT=${RESULT// /} j’obtiens :

Pour vous donner une idée, mais j’attend quelquechose de plus efficace … parce que là, ça me fais quand même :

RESULT=`echo "$RESULT" | sed s/[:alpha:]//g | sed s/[a-z]//g` RESULT=${RESULT// /' '} RESULT=${RESULT// /}3 lignes un peu lourdes non ?
en fait, je n’arrive pas à introduire un test OU dans sed ou dans ${RESULT// /}, le plus simple serait un truc du style :
${RESULT//successiond’espaces OU lettres OU ponctuation OU retourdechariot/}

sed ‘s/[:alpha:]//;s/[a-z]//g’

Merci stonfi, ça rend pas ce que je veux mais ça m’a permis de trouver autre chose :

RESULT=`echo "$RESULT" | \ sed 's/[:alpha:]//;s/[a-z]//g' | \ tr -d '\n' | tr -s ' '`
Mais est-ce qu’il y a pas mieux … :confused:
nb : ligne 1 lit la variable, ligne 2 enlève les caractères de ponctuation et lettres, lignes 3 enlève saut de ligne et remplace toute succession d’espace par une occurence d’espace …
ps: oui c’est pas retour de chariot que je voulais dire, mais saut de ligne …