Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[bash] sed avec une variable

7 réponses
Avatar
hugolino
Bonjour

Dans un script, je veux renommer des fichiers avec le nom donné par
l'utilisateur.
Donc je stocke la variable dans $ArtisteAnnee, et ma boucle est:

for fichier in track*
do
NouveauNom=`echo $fichier | sed -e 's/track/ArtisteAnnee/'`
echo -n " Nouveau nom '"$NouveauNom"'. OK ? [O,n]"
TestReponse
done

Et les lignes suivantes s'affiche au fur et à mesure que la boucle
s'exécute:
Nouveau nom 'ArtisteAnnee01.cdda.mp3'. OK ? [O,n]
Nouveau nom 'ArtisteAnnee02.cdda.mp3'. OK ? [O,n]
...

J'ai bien sûr essayé à peu près tout ce que je pouvais mais ça veut pas,
le mieux que j'ai obtenu, c'est d'avoir la variable NouveauNom égale à
ArtisteAnnee en encadrant $ArtisteAnnee par des AltGr-7, mais avec 4
lignes d'insultes par tour dans la boucle (et la fin du nom du fichier
avait disparu).

Bref, je suis un peu coincé et Linux in a Nutshell est toujours aussi
abscons, quand au Système Linux il ne fait référence qu'une fois à sed.

Donc Help Wanted...


Un dernier truc:
La commande, "find / -name "track*" -print 2>/dev/null" marche dans un
xterm, mais ne fonctionne pas dans mon script.
Elle ne sort qu'une ligne, sur le premier fichier qu'elle trouve en me
disant "Permission non accordée" et pourtant je suis rw sur ce fichier
et rwx sur le répertoire le contenant.
Je reconnais que après 6 ans de Linux je ne comprends pas trop comment
marche find (et c'est pas faute d'essayer de comprendre sa page de man
et les exemples d'utilsation que je lis sur le ng)


Merci de toute aide


--
/(_M_)\ .------------------------------. /(_M_)\
| | ( POWERED BY Alain KRIVINE/LINUX ) | |
\/~V~\/ `------------------------------' \/~V~\/
-+- DB in Guide du linuxien pervers - "Mieux que la SLS : la LCR !"

7 réponses

Avatar
Stephane Chazelas
2004-01-18, 04:17(+01), Hugolino:
Dans un script, je veux renommer des fichiers avec le nom donné par
l'utilisateur.


En bash/ksh93/zsh:

NouveauNom=${fichier/track/"$ArtisteAnnee"}

[...]
Bref, je suis un peu coincé et Linux in a Nutshell est toujours aussi
abscons, quand au Système Linux il ne fait référence qu'une fois à sed.


Le problème, si tu fais:

NouveauNom=$(printf '%sn' "$fichier" |
sed "s/track/$ArtisteAnnee/")

C'est que ça va foirer si $ArtisteAnnee contient des caractères
spéciaux pour "sed" (, & ou / ici).

[...]
La commande, "find / -name "track*" -print 2>/dev/null" marche dans un
xterm, mais ne fonctionne pas dans mon script.
Elle ne sort qu'une ligne, sur le premier fichier qu'elle trouve en me
disant "Permission non accordée" et pourtant je suis rw sur ce fichier
et rwx sur le répertoire le contenant.


T'es sûr que tu n'as pas écrit:

`find / -name "track*" -print 2>/dev/null`

(avec des backquotes indiquant au shell que l'output de find
doit être pris comme une ligne de commande à exécuter) ?

Note que pour des renommages, tu devrais plutôt utiliser "mmv",
ou le zmv de zsh.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
hugolino
Le Sun, 18 Jan 2004 18:54:14 +0100, Stephane Chazelas a écrit:
2004-01-18, 04:17(+01), Hugolino:
Dans un script, je veux renommer des fichiers avec le nom donné par
l'utilisateur.


En bash/ksh93/zsh:

NouveauNom=${fichier/track/"$ArtisteAnnee"}


Oui, c'est dans la section "Remplacement des paramètres" de la page de
man de bash.
Mais j'avoue que je ne l'avais pas comprise avant que tu me montres que
c'est simple à utiliser.

[...]
Bref, je suis un peu coincé et Linux in a Nutshell est toujours aussi
abscons, quand au Système Linux il ne fait référence qu'une fois à sed.


Le problème, si tu fais:

NouveauNom=$(printf '%sn' "$fichier" |
sed "s/track/$ArtisteAnnee/")

C'est que ça va foirer si $ArtisteAnnee contient des caractères
spéciaux pour "sed" (, & ou / ici).

T'es sûr que tu n'as pas écrit:

`find / -name "track*" -print 2>/dev/null`


Si tu as raison. Mea culpa.

(avec des backquotes indiquant au shell que l'output de find
doit être pris comme une ligne de commande à exécuter) ?


Oui, quel idiot !


Note que pour des renommages, tu devrais plutôt utiliser "mmv",
ou le zmv de zsh.


Ah ? Quel interêt ? Et dans quel package trouver mmv ?


Merci encore de ton aide.


--
Hugo NPN (i --> ee)
Sinon, à propos d'afterstep et de window maker : quand je déplace une
fenetre, en plus de la neige sur le moniteur, j'ai du crachin dans les
haut parleurs... -+- hcl in GLP "y'a plus de saison j'vous dis" -+-



Avatar
Stephane Chazelas
2004-01-20, 16:31(+01), Hugolino:
[...]
Note que pour des renommages, tu devrais plutôt utiliser "mmv",
ou le zmv de zsh.


Ah ? Quel interêt ? Et dans quel package trouver mmv ?
[...]


Bein, c'est fait pour ça, ça gère les cas litigieux... Note que
zmv est beaucoup plus puissant que mmv.

mmv est un outil "standalone" vieux comme le monde (donc,
éprouvé), donc tu devrais le trouver dans un package "mmv", je
m'étonne que tu ne l'aies pas déjà sur ton système, d'ailleurs.
Y a aussi son ancètre "ren", du même auteur.

Sinon, si tu as zsh4: autoload -U zmv

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
Bonjour,
desole si c'est pas le bon forum, mais j'ai pas trouve plus approprie,
les gens de fr.lang.c criant des qu'on est os dependant...

je cherche comant recupere le nom de l'utilisateur (who i am)
dans un programme c. (pour l'instant de je fait system("who i am >tmp")
puis je relis tmp mais c'est vraiment crado...

OP.
Avatar
Jean-Marc Bourguet
"@(none)" <""olivier"@(none)"> writes:

desole si c'est pas le bon forum, mais j'ai pas trouve plus
approprie, les gens de fr.lang.c criant des qu'on est os
dependant...


Non sans raison. Ce groupe est tout a fait approprie pour ce genre de
questions.

je cherche comant recupere le nom de l'utilisateur (who i am)
dans un programme c. (pour l'instant de je fait system("who i am >tmp")
puis je relis tmp mais c'est vraiment crado...


man getpwuid
man getuid

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Laurent Wacrenier
@(none) <> écrit:
je cherche comant recupere le nom de l'utilisateur (who i am)
dans un programme c.


man getlogin

Avatar
gdm
@(none)" <""olivier"@(none) wrote:
Bonjour,
desole si c'est pas le bon forum, mais j'ai pas trouve plus approprie,
les gens de fr.lang.c criant des qu'on est os dependant...

je cherche comant recupere le nom de l'utilisateur (who i am)
dans un programme c. (pour l'instant de je fait system("who i am
tmp") puis je relis tmp mais c'est vraiment crado...



oui, faites plutot popen("who i am"). c'est plus elegant.

--
gdm
Tout échange volontaire crée de la valeur pour les deux co-échangistes.