J'ai dans un script bash une variable $i de la forme: artiste_-_titre.ogg
Je veux obtenir une forme: titre.mp3
avec ${i#_-_} j'obtiens: titre.ogg
avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire
et je ne trouve pas de solution dans les docs que j'ai sur bash.
Quelqu'un aurait une idée?
Lionel
PS: on m'a offert un autoradio mp3 qui ne lit pas les ogg (d'ou le besoin de
conversion) et dont l'affichage est limité à 32 caractères (d'où le besoin
de raccourcir les noms de fichiers).
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire et je ne trouve pas de solution dans les docs que j'ai sur bash.
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès qu'on dépasse un niveau :(
chmod 777 wrote in message <5387612.oPfC0OQzJt@athos>:
avec ${i#_-_} j'obtiens: titre.ogg
Hum, ce ne serait pas plutôt « ${i#*_-_} » ?
avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire
et je ne trouve pas de solution dans les docs que j'ai sur bash.
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des
erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès
qu'on dépasse un niveau :(
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire et je ne trouve pas de solution dans les docs que j'ai sur bash.
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès qu'on dépasse un niveau :(
TiChou
Dans le message <news:cl8hp8$t70$, *Nicolas George* tapota sur f.c.o.l.configuration :
chmod 777 wrote:
avec ${i#_-_} j'obtiens: titre.ogg Hum, ce ne serait pas plutôt « ${i#*_-_} » ?
avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire et je ne trouve pas de solution dans les docs que j'ai sur bash.
${${i#*_-_}%ogg}mp3
Cette syntaxe de substitution fonctionne avec le shell zsh, mais pas avec le shell bash.
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie.
Oui. :)
-- TiChou
Dans le message <news:cl8hp8$t70$2@biggoron.nerim.net>,
*Nicolas George* tapota sur f.c.o.l.configuration :
chmod 777 wrote:
avec ${i#_-_} j'obtiens: titre.ogg
Hum, ce ne serait pas plutôt « ${i#*_-_} » ?
avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable
intermédiaire et je ne trouve pas de solution dans les docs que j'ai sur
bash.
${${i#*_-_}%ogg}mp3
Cette syntaxe de substitution fonctionne avec le shell zsh, mais pas avec le
shell bash.
Mais passer par une variable intermédiaire est moins risqué au niveau des
erreurs de saisie.
${${i#*_-_}%ogg}mp3 Cette syntaxe de substitution fonctionne avec le shell zsh, mais pas avec
le shell bash.
Ah oui, tiens. Au temps pour moi, j'étais persuadé que c'était aussi standard que les ${foo<machin>bar} eux-mêmes.
Et bien merci à vous...
Effectivement, j'avais oublié un petit "#" dans mon post initial.
Bon, pas de soluce à moins de changer de shell et comme ça tourne comme ça, au diable l'élégance! (j'ai déjà fait pire)
Lionel
Christophe PEREZ
Le Thu, 21 Oct 2004 14:40:41 +0000, Nicolas George a écrit:
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès qu'on dépasse un niveau :(
Il n'y a pas que lui, je n'ai jamais réussi quoi que ce soit avec cette syntaxe en bash, "bad substitution" systématique : $ S=coucou $ RES1=${S#cou} $ RES2=${RES1#c} $ echo $S $RES1 $RES2 coucou cou ou $ RES3=${${S#cou}#c} bash: ${${S#cou}#c}: bad substitution
-- Christophe PEREZ Écrivez moi sans _faute !
Le Thu, 21 Oct 2004 14:40:41 +0000, Nicolas George a écrit:
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des
erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès
qu'on dépasse un niveau :(
Il n'y a pas que lui, je n'ai jamais réussi quoi que ce soit avec cette
syntaxe en bash, "bad substitution" systématique :
$ S=coucou
$ RES1=${S#cou}
$ RES2=${RES1#c}
$ echo $S $RES1 $RES2
coucou cou ou
$ RES3=${${S#cou}#c}
bash: ${${S#cou}#c}: bad substitution
Le Thu, 21 Oct 2004 14:40:41 +0000, Nicolas George a écrit:
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès qu'on dépasse un niveau :(
Il n'y a pas que lui, je n'ai jamais réussi quoi que ce soit avec cette syntaxe en bash, "bad substitution" systématique : $ S=coucou $ RES1=${S#cou} $ RES2=${RES1#c} $ echo $S $RES1 $RES2 coucou cou ou $ RES3=${${S#cou}#c} bash: ${${S#cou}#c}: bad substitution
-- Christophe PEREZ Écrivez moi sans _faute !
Christophe PEREZ
Le Thu, 21 Oct 2004 17:27:48 +0200, TiChou a écrit:
Cette syntaxe de substitution fonctionne avec le shell zsh, mais pas avec le shell bash.
J'ai posté avant d'avoir lu, donc on ne _répond_ pas à mon autre post ;-) (Non, pas de cancel, sinon mon pan/inn se prend le pied dans le tapis, désolé)
-- Christophe PEREZ Écrivez moi sans _faute !
Le Thu, 21 Oct 2004 17:27:48 +0200, TiChou a écrit:
Cette syntaxe de substitution fonctionne avec le shell zsh, mais pas avec le
shell bash.
J'ai posté avant d'avoir lu, donc on ne _répond_ pas à mon autre post ;-)
(Non, pas de cancel, sinon mon pan/inn se prend le pied dans le tapis,
désolé)
Le Thu, 21 Oct 2004 17:27:48 +0200, TiChou a écrit:
Cette syntaxe de substitution fonctionne avec le shell zsh, mais pas avec le shell bash.
J'ai posté avant d'avoir lu, donc on ne _répond_ pas à mon autre post ;-) (Non, pas de cancel, sinon mon pan/inn se prend le pied dans le tapis, désolé)
-- Christophe PEREZ Écrivez moi sans _faute !
no_spam
On Thu, 21 Oct 2004 14:33:29 -0400, Christophe PEREZ wrote:
Le Thu, 21 Oct 2004 14:40:41 +0000, Nicolas George a écrit:
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès qu'on dépasse un niveau :(
Il n'y a pas que lui, je n'ai jamais réussi quoi que ce soit avec cette syntaxe en bash, "bad substitution" systématique : $ S=coucou $ RES1=${S#cou} $ RES2=${RES1#c} $ echo $S $RES1 $RES2 coucou cou ou $ RES3=${${S#cou}#c} bash: ${${S#cou}#c}: bad substitution
En fait, il faut se servir de la fonction "eval" de bash. Un exemple simple: S="coucou" ; T="S" ; eval RES=${$T} ; echo "RES=${RES}" ;
On Thu, 21 Oct 2004 14:33:29 -0400, Christophe PEREZ wrote:
Le Thu, 21 Oct 2004 14:40:41 +0000, Nicolas George a écrit:
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des
erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès
qu'on dépasse un niveau :(
Il n'y a pas que lui, je n'ai jamais réussi quoi que ce soit avec cette
syntaxe en bash, "bad substitution" systématique :
$ S=coucou
$ RES1=${S#cou}
$ RES2=${RES1#c}
$ echo $S $RES1 $RES2
coucou cou ou
$ RES3=${${S#cou}#c}
bash: ${${S#cou}#c}: bad substitution
En fait, il faut se servir de la fonction "eval" de bash. Un exemple
simple:
S="coucou" ;
T="S" ;
eval RES=${$T} ;
echo "RES=${RES}" ;
On Thu, 21 Oct 2004 14:33:29 -0400, Christophe PEREZ wrote:
Le Thu, 21 Oct 2004 14:40:41 +0000, Nicolas George a écrit:
${${i#*_-_}%ogg}mp3
Mais passer par une variable intermédiaire est moins risqué au niveau des erreurs de saisie. Et puis le syntax-highlight de Vim a des problèmes dès qu'on dépasse un niveau :(
Il n'y a pas que lui, je n'ai jamais réussi quoi que ce soit avec cette syntaxe en bash, "bad substitution" systématique : $ S=coucou $ RES1=${S#cou} $ RES2=${RES1#c} $ echo $S $RES1 $RES2 coucou cou ou $ RES3=${${S#cou}#c} bash: ${${S#cou}#c}: bad substitution
En fait, il faut se servir de la fonction "eval" de bash. Un exemple simple: S="coucou" ; T="S" ; eval RES=${$T} ; echo "RES=${RES}" ;
Nicolas George
no_spam wrote in message :
En fait, il faut se servir de la fonction "eval" de bash. Un exemple simple: S="coucou" ; T="S" ; eval RES=${$T} ; echo "RES=${RES}" ;
Tu n'as pas compris la question, il ne s'agit pas de faire une indirection mais deux substitutions d'un coup.
no_spam wrote in message <pan.2004.10.21.21.55.49.360732@magic.fr>:
En fait, il faut se servir de la fonction "eval" de bash. Un exemple
simple:
S="coucou" ;
T="S" ;
eval RES=${$T} ;
echo "RES=${RES}" ;
Tu n'as pas compris la question, il ne s'agit pas de faire une indirection
mais deux substitutions d'un coup.
Le Thu, 21 Oct 2004 22:41:55 +0000, Nicolas George a écrit:
Tu n'as pas compris la question, il ne s'agit pas de faire une indirection mais deux substitutions d'un coup.
Tout à fait, et sans passer par une variable intermédiaire, bien sûr ;-)
-- Christophe PEREZ Écrivez moi sans _faute !
Raphaël 'SurcouF' Bordet
chmod 777 wrote:
Bonjour à tous
J'ai dans un script bash une variable $i de la forme: artiste_-_titre.ogg Je veux obtenir une forme: titre.mp3
avec ${i#_-_} j'obtiens: titre.ogg avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire et je ne trouve pas de solution dans les docs que j'ai sur bash.
Quelqu'un aurait une idée?
Il existe normalement une commande miraculeuse nommée "rename" qui permet justement, via une regexp bien sentie, de faire des lots de changements de noms...
$ replace 's/([a-z]+)_-_([a-z]+).ogg/$2.mp3/' *.mp3 (par exemple, je crois)
-- Raphaël 'SurcouF' Bordet http://debianfr.net/ | surcouf at debianfr dot net
chmod 777 wrote:
Bonjour à tous
J'ai dans un script bash une variable $i de la forme: artiste_-_titre.ogg
Je veux obtenir une forme: titre.mp3
avec ${i#_-_} j'obtiens: titre.ogg
avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire
et je ne trouve pas de solution dans les docs que j'ai sur bash.
Quelqu'un aurait une idée?
Il existe normalement une commande miraculeuse nommée "rename" qui
permet justement, via une regexp bien sentie, de faire des lots de
changements de noms...
$ replace 's/([a-z]+)_-_([a-z]+).ogg/$2.mp3/' *.mp3
(par exemple, je crois)
--
Raphaël 'SurcouF' Bordet
http://debianfr.net/ | surcouf at debianfr dot net
J'ai dans un script bash une variable $i de la forme: artiste_-_titre.ogg Je veux obtenir une forme: titre.mp3
avec ${i#_-_} j'obtiens: titre.ogg avec ${i%ogg}mp3 j'obtiens: artiste_-_titre.mp3
Je n'arrive pas à combiner les 2 sans passer par une variable intermédiaire et je ne trouve pas de solution dans les docs que j'ai sur bash.
Quelqu'un aurait une idée?
Il existe normalement une commande miraculeuse nommée "rename" qui permet justement, via une regexp bien sentie, de faire des lots de changements de noms...
$ replace 's/([a-z]+)_-_([a-z]+).ogg/$2.mp3/' *.mp3 (par exemple, je crois)
-- Raphaël 'SurcouF' Bordet http://debianfr.net/ | surcouf at debianfr dot net