Pages : 1
#1 Le 18/11/2010, à 23: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, à 18: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, à 01: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, à 01: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, à 01: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, à 02: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, à 02: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, à 02: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, à 02: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
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, à 02: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, à 02: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 ...
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, à 02: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, à 02:50
- FRUiT
Re : [Résolu] Cut de variable
Ah j'en ai essayé aussi des tas de trux
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, à 02:52
- FRUiT
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.
Marrant, y ont fait un builtin cd, mais pas de ls
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, à 03:09
- ehmicky
Re : [Résolu] Cut de variable
Là je suis à court. Peut-être si Totor passe par là demain matin
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, à 03: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, à 03:54
- FRUiT
Re : [Résolu] Cut de variable
Ah !! (flash de 4h du matin)
echo ${string//[0-9.]/}
Ca le fait
Problème résolu !
[EDIT 4h05] grrr, ça marche qu'en bash
Dernière modification par FRUiT (Le 19/11/2010, à 04: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, à 04: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, à 04: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, à 04: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.
(le monde appartient à ceux qui se couchent tard)
C'est pas faux
Dernière modification par FRUiT (Le 19/11/2010, à 04: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, à 04: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
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
#15 Le 19/11/2010, à 04: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
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, à 09: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
Dernière modification par Totor (Le 19/11/2010, à 10:06)
-- Lucid Lynx --
Hors ligne
#17 Le 19/11/2010, à 18: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 :
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