[gull] Shell - comment obtenir une partie du contenu d'une variable ?
Daniel Cordey
dc at mjt.ch
Wed Jul 16 17:25:02 CEST 2003
On Wednesday 16 July 2003 16:56, B . Carrupt wrote:
> un.deux.trois ---> un.deux
> quatre.cinq.six ---> quatre.cinq
x='un.deux.trois'
y='quatre.cinq.six'
echo ${x%%.trois}
un.deux
echo ${y%%.six}
quatre.cinq
echo ${x##un.}
deux.trois
Mais bon, c'est assez limite bien que l'on puisse utiliser une variable pour
le "pattern". On peut aussi faire :
echo $( echo ${x} | sed 's/\.[a-z]+$//')
Mais, la, ca devient franchement ridicule... on peut aussi passer par awk avec
des performances un poil meilleures mais bon... et tu vas voir les Perlistes
se dechainer. En quoi ils auront raison puisque le shell n'est pas destine a
manipuler des chaines de caracteres.
Toutefois, la chose peut devenir interessante si, comme tu le dis, tu
manipules une liste de fichiers tel que :
ls | sed "s/\.[a-z]+$/${NewSuffix}/"
To obtiens une liste modifiee d'un seul coup
En partant du principe que le suffix est toujours le meme...
ls |\
while read file
do
echo "${file%%.trois}.${NewSuffix}
dobe
Ca reste performant et lisible. De plus, tu as une grande liberte de
traitement a l'interireur de la boucle. Bref tout est combinable mais si le
traitement necessite des calculs et des traitements de chaines de caracteres
plus pousses, il faudrait envisager un autre langage de scripting plus
approprie. Tel que tcl, Python, Perl, etc.
> J'ai un système RedHat 7.2, mais je pense que ça ne doit pas avoir
> d'importance.
Aucune
Daniel
More information about the gull
mailing list