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 19/11/2010, à 00:30

FRUiT

[Résolu] Cut de variable

> string="22 les carottes sont géantes."
> printf "%b\n" "${string%.}"
22 les carottes sont géantes
> printf "%b\n" "${string#[0-9]*[[:space:]]}"
les carottes sont géantes.

Est-ce possible de combiner ces deux actions sur la chaine en une seule ? en sh ?

[EDIT] sans outils externes bien sur tels que awk cut ou autres. juste en expansions de variables.

Dernière modification par FRUiT (Le 19/11/2010, à 19:01)


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

#2 Le 19/11/2010, à 02:31

chopinhauer

Re : [Résolu] Cut de variable

printf "%s\n%s\n" "${string%.}" "${string#[0-9]*[[:space:]]}"

Si tu veux couper début et fin de la chaîne, tu le fais en deux passages : couper le début et couper la fin. Tu te rends compte, j'espère que ce qui est après '#' et '%' ne sont pas des expressions régulières ? "22-rondes-et-belles " aurait été aussi effacé.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 19/11/2010, à 02:54

FRUiT

Re : [Résolu] Cut de variable

Oui oui je sais pour les regexp, ce que j'ai à découper est vraiment aussi simple que ça. Ma question c'était justement ça, en une passe,  couper le début et la fin de la chaine pour un seul résultat final : "les carrotes sont géantes"

Donc selon toi une passe, pas faisable ?

J'ai vu des choses assez compliquées du genre avec imbrication :

${STR#"${STR%%[![:space:]]*}"}

Alors je me disais...

Dernière modification par FRUiT (Le 19/11/2010, à 02:56)


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

#4 Le 19/11/2010, à 03:01

ehmicky

Re : [Résolu] Cut de variable

Salut,

$ expr "22 les carottes sont géantes." : "[[:digit:]]*[[:space:]]\(.*\)."
les carottes sont géantes

(expr est un builtin)
Edit : je me dis que quel que soit le degré d'imbrication de ${VAR#${VAR%${VAR##...}}}, au final, après résolution des ${VAR...} imbriqués, on obtient un ${VAR#VAL}, (ou ${VAR%%VAL}, etc.), et donc qu'au final seul la troncature du début OU de la fin a lieu. Enfin, ça me paraît impossible d'un point de vue logique avec des ${} imbriqués de couper les deux bouts en même temps.
Edit 2 : oops, expr est une commande externe en fait !

Dernière modification par ehmicky (Le 19/11/2010, à 03:11)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#5 Le 19/11/2010, à 03:15

chopinhauer

Re : [Résolu] Cut de variable

Bien trouvé ehmicky. Ce n'est pas un builtin, mais si on se restreignait aux builtins on n'aurait même pas ls.

$ type expr
expr est haché (/usr/bin/expr)

Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#6 Le 19/11/2010, à 03:24

FRUiT

Re : [Résolu] Cut de variable

$ expr "22 les carottes sont géantes." : "[[:digit:]]*[[:space:]]\(.*\)."
les carottes sont géantes

Intéressant, très même merci à toi je note mais c'est plus une expansion de variable big_smile

ehmicky a écrit :

Edit : je me dis que quel que soit le degré d'imbrication de ${VAR#${VAR%${VAR##...}}}, au final, après résolution des ${VAR...} imbriqués, on obtient un ${VAR#VAL}, (ou ${VAR%%VAL}, etc.), et donc qu'au final seul la troncature du début OU de la fin a lieu. Enfin, ça me paraît impossible d'un point de vue logique avec des ${} imbriqués de couper les deux bouts en même temps.

C'est un peu ce dont j'avais peur et effectivement c'est logique.

Dernière modification par FRUiT (Le 19/11/2010, à 03:27)


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

#7 Le 19/11/2010, à 03:39

ehmicky

Re : [Résolu] Cut de variable

Faut peut-être regarder du côté des combinaisons de ${VAR/#VAL/${VAR%VAL}}... ou je sais pas quoi big_smile...
Edit : j'ai peut-être une piste complètement tordue...
Edit 2 : non ça marche pas, je pensais faire un truc du genre ${VAR#$(VAR = ${VAR%VAL})}, mais quand on fait $(VAR = VAL), une null string est renvoyée et VAL n'est pas affecté à VAR.
Edit 3 : ah je comprends pourquoi, c'est vrai : $( ) ouvre un subshell, donc VAR est local.

Dernière modification par ehmicky (Le 19/11/2010, à 03:50)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#8 Le 19/11/2010, à 03:50

FRUiT

Re : [Résolu] Cut de variable

Ah j'en ai essayé aussi des tas de trux big_smile

Mais je crois que tu as raison en une passe c'est impossible et que ta démonstration est juste.

Du coup je mets résolu ou pas ?


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

#9 Le 19/11/2010, à 03:52

FRUiT

Re : [Résolu] Cut de variable

chopinhauer a écrit :

Bien trouvé ehmicky. Ce n'est pas un builtin, mais si on se restreignait aux builtins on n'aurait même pas ls.

Marrant, y ont fait un builtin cd, mais pas de ls lol


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 19/11/2010, à 04:09

ehmicky

Re : [Résolu] Cut de variable

Là je suis à court. Peut-être si Totor passe par là demain matin big_smile
C'est dommage, moi aussi j'ai toujours voulu pouvoir faire un ${${VAR#VAL}%VAL}, mais le problème c'est qu'il faut une lvalue pour VAR.

Dernière modification par ehmicky (Le 19/11/2010, à 04:10)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#11 Le 19/11/2010, à 04:54

FRUiT

Re : [Résolu] Cut de variable

Ah !! (flash de 4h du matin)

echo ${string//[0-9.]/}

Ca le fait smile

Problème résolu !

[EDIT 4h05] grrr,  ça marche qu'en bash sad

Dernière modification par FRUiT (Le 19/11/2010, à 05:05)


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

#12 Le 19/11/2010, à 05:05

ehmicky

Re : [Résolu] Cut de variable

Ah oui mais ça vérifie pas que les chiffres à enlever sont au début et le point à la fin. Je pensais en fait que ta question était générale sur "Comment tronquer au début et à la fin" et était pas spécifique à cet exemple précis ^^
(le monde appartient à ceux qui se couchent tard)
En fait je crois qu'on est peut-être obligé de le faire en deux fois : VAR=${VAR#VAL} ; VAR=${VAR%VAL}

Dernière modification par ehmicky (Le 19/11/2010, à 05:07)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#13 Le 19/11/2010, à 05:07

FRUiT

Re : [Résolu] Cut de variable

Bien c'est une question à laquelle j'aimerais répondre. C'est sur que là c'est de la bidouille... Je mets pas résolu tout de suite c'est quand même intéressant.

ehmicky a écrit :

(le monde appartient à ceux qui se couchent tard)

C'est pas faux big_smile

Dernière modification par FRUiT (Le 19/11/2010, à 05:10)


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

#14 Le 19/11/2010, à 05:09

ehmicky

Re : [Résolu] Cut de variable

Dans un sens, c'est peut-être pas plus mal qu'on puisse le faire qu'en deux fois, comme ça c'est plus clair. Après tout, la priorité de Bash c'est pas les performances ou les codes concis mais obscurs, mais au contraire la lisibilité et la simplicité. Enfin après c'est mon point de vue ça big_smile

Dernière modification par ehmicky (Le 19/11/2010, à 05:10)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#15 Le 19/11/2010, à 05:13

FRUiT

Re : [Résolu] Cut de variable

Oui mais je pense que un autre atout du bash c'est la condensation  du code  par rapport à sh. En bash on fait en 2 lignes ce qu'on faisait en 10 en sh.

Mais on s'égare c'est un sujet sh ici alors pas de hs hein big_smile big_smile


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

#16 Le 19/11/2010, à 10:54

Totor

Re : [Résolu] Cut de variable

Salut,

Regarde ma réponse
Par contre, je n'ai pas vérifié si c'est compatible sh hmm

Dernière modification par Totor (Le 19/11/2010, à 11:06)


-- Lucid Lynx --

Hors ligne

#17 Le 19/11/2010, à 19:00

FRUiT

Re : [Résolu] Cut de variable

Raaa en plus je l'avais lu ce thread ! Désolé pour le doublon...

Je note dans mes petits papiers ta fonction. Moi qui voulais réduire string=${string%.} & string=${string#[0-9]} ^^

En tout cas tu réponds à ma question :

Totor a écrit :

et non ...:(

je mets résolu.


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