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 17/01/2008, à 00:19

wlourf

[bash résolu] récupérer la fin d'une chaine ...

Bonsoir, quelle commande doit-on utiliser pour récupérer la fin d'une chaine (a partir du 10eme caractère par exemple) de longueur inconnue, je n'arrive pas à  appliquer ce qui est décrit ici : http://abs.traduc.org/abs-5.1-fr/ch09s02.html (paragraphe  Extraction d'une sous-chaà®ne).  bien sûr je peux calculer la longueur de la chaine et faire les calculs mais il n'y a pas plus simple?

#!/bin/bash
#récupérer  la fin d'une chaine de longueur inconnue à  partir du 10eme caractère
chaine="abcdefghijklmnopq"
echo "chaine : $chaine"
echo ${@chaine:10} ou autres syntaxes marchent pas :(

echo ${chaine:10:${#chaine}}  #fonctionne mais il n'y a pas plus simple ??

Merci de votre indulgence !

Dernière modification par wlourf (Le 17/01/2008, à 01:31)

Hors ligne

#2 Le 17/01/2008, à 00:45

Link31

Re : [bash résolu] récupérer la fin d'une chaine ...

echo $chaine | tail -c+11

Hors ligne

#3 Le 17/01/2008, à 00:55

Alain.g

Re : [bash résolu] récupérer la fin d'une chaine ...

Bonsoir

Simplement :

echo ${chaine:9}

Cela revient à  supprimer les 9 premiers caractères ne gardant ainsi que le reste de la chaà®ne à  partir du 10ème

Dernière modification par Alain.g (Le 17/01/2008, à 01:17)


Xubuntu Karmic !

Hors ligne

#4 Le 17/01/2008, à 01:03

abetsic

Re : [bash résolu] récupérer la fin d'une chaine ...

Ce n'est pas parce que une commande est longue qu'elle est compliquée. Même si la solution donnée par Link31 est plus courte plus lisible, ce n'est pas forcément la plus "économe". Elle fait appel à  un programme externes (tail) et nécessite un pipe. La solution que tu as donnés fait appel aux fonction intégrés à  bash, ce qui à  mon sens est bien meilleur.

Et puis je trouve plus élégant d'utiliser les outils proposés par bash que de faire du bricolage avec des pipe (N'y voit aucune attaque personnel Link31 ! c'est juste un avis personnel, et je reconnais volontier ta solution smile )

Hors ligne

#5 Le 17/01/2008, à 01:32

wlourf

Re : [bash résolu] récupérer la fin d'une chaine ...

merci à  tous, j'aime bien ${chaine:9} !

Dernière modification par wlourf (Le 17/01/2008, à 01:33)

Hors ligne

#6 Le 17/01/2008, à 16:32

kaworu

Re : [bash résolu] récupérer la fin d'une chaine ...

abetsic a écrit :

Ce n'est pas parce que une commande est longue qu'elle est compliquée. Même si la solution donnée par Link31 est plus courte plus lisible, ce n'est pas forcément la plus "économe". Elle fait appel à  un programme externes (tail) et nécessite un pipe. La solution que tu as donnés fait appel aux fonction intégrés à  bash, ce qui à  mon sens est bien meilleur.

Et puis je trouve plus élégant d'utiliser les outils proposés par bash que de faire du bricolage avec des pipe (N'y voit aucune attaque personnel Link31 ! c'est juste un avis personnel, et je reconnais volontier ta solution smile )

C'est le dilemme du shell.

1) Tu fais un truc performant, illisible genre MYVAR=foodforthought.jpg; echo ${MYVAR##*fo}, et pas portable (seulement bash supporte ce genre d'opérations sur les variables ! tu peux pas facilement partager tes script, ou apprendre à  écrire des script d'init)

2) tu fais un pipe (voir plusieurs...) lisible, portable, mais les perfs sont vraiment lamentables (VRAIMENT).

il n'y pas une qui est meilleur que l'autre. Il faut voir dans quel but on écris le script (si les perf compte plus que la portabilité/lisibilité ou pas). Si vraiment le dilemme est trop dur (t'as besoin d'un truc portable et performant) alors il faut changer de langage.


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne