Script bash - commande sed
Résolu/Fermé
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
-
22 déc. 2009 à 11:34
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010 - 22 déc. 2009 à 21:37
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010 - 22 déc. 2009 à 21:37
A voir également:
- Script bash - commande sed
- Invite de commande - Guide
- Script vidéo youtube - Guide
- Commande terminal mac - Guide
- Commande chkdsk - Guide
- Retour à la ligne bash ✓ - Forum Shell
9 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
22 déc. 2009 à 12:43
22 déc. 2009 à 12:43
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
1
22 déc. 2009 à 12:59
22 déc. 2009 à 12:59
Juste un petit détail, sed ne modifie donc pas directement le nom du fichier???
Il faut le coupler à la commande mv?
Merci
Il faut le coupler à la commande mv?
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
22 déc. 2009 à 13:01
22 déc. 2009 à 13:01
Ben oui.
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
1
22 déc. 2009 à 13:29
22 déc. 2009 à 13:29
par contre j'ai un soucis avec la boucle for
Moi ce que je dois faire, ce n'est pas utiliser le répertoire courant mais le répertoire passé en argument?
comment dois-je faire?
for fich in $(find $1 -type d);do
.....
?
personnellement ca ne fonctionne pas.
je fais un echo $fich pour voir s'il parcourt bien mon répertoire
mais il m'affiche le nom de mon répertoire.
merci
Moi ce que je dois faire, ce n'est pas utiliser le répertoire courant mais le répertoire passé en argument?
comment dois-je faire?
for fich in $(find $1 -type d);do
.....
?
personnellement ca ne fonctionne pas.
je fais un echo $fich pour voir s'il parcourt bien mon répertoire
mais il m'affiche le nom de mon répertoire.
merci
bob031
Messages postés
8158
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
472
22 déc. 2009 à 13:31
22 déc. 2009 à 13:31
Bonjour,
ceci devrait t'aider :
http://www.hotels-in-mallorca.net/en/partmaps.html#ls
ceci devrait t'aider :
http://www.hotels-in-mallorca.net/en/partmaps.html#ls
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
1
22 déc. 2009 à 14:28
22 déc. 2009 à 14:28
voilà ce que j'ai testé
il parcourt bien mon répertoire mais j'ai des erreurs au niveau de la commande mv.
sed n'agit pas. sans doute une erreur dans la regex.
je ne gère pas les extensions pour le moment.
if [ $# -eq 0];then echo "Veuillez renseigner le répertoire en paramètre"; elif [ -d $1 ];then for fich in $1/*;do mv "$fich" "$(echo $fich | sed 's/[a-zA-Z]+/[A-Z][a-z]*/g')"; done else echo "Le répertoire n'existe pas"; fi
il parcourt bien mon répertoire mais j'ai des erreurs au niveau de la commande mv.
sed n'agit pas. sans doute une erreur dans la regex.
je ne gère pas les extensions pour le moment.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
22 déc. 2009 à 14:43
22 déc. 2009 à 14:43
jp@MDK:~/tmpfs ssh$ cat foo.sh #! /bin/sh #set -xv for i in rep/sousrep/brol/* do rep=$(dirname $i) fich=$(echo $(basename $i)|sed s'/./\u&/') mv -v $i ${rep}/${fich} done jp@MDK:~/tmpfs ssh$ tree . |-- - |-- foo.sh `-- rep `-- sousrep |-- brol | |-- fich1.txt | |-- fich2.txt | `-- fich3.txt |-- fich1.txt |-- fich2.txt `-- fich3.txt 4 directories, 7 files jp@MDK:~/tmpfs ssh$ ./foo.sh `rep/sousrep/brol/fich1.txt' -> `rep/sousrep/brol/Fich1.txt' `rep/sousrep/brol/fich2.txt' -> `rep/sousrep/brol/Fich2.txt' `rep/sousrep/brol/fich3.txt' -> `rep/sousrep/brol/Fich3.txt' jp@MDK:~/tmpfs ssh$ tree . |-- - |-- foo.sh `-- rep `-- sousrep |-- brol | |-- Fich1.txt | |-- Fich2.txt | `-- Fich3.txt |-- fich1.txt |-- fich2.txt `-- fich3.txt 4 directories, 7 files jp@MDK:~/tmpfs ssh$
;-))
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
1
22 déc. 2009 à 15:25
22 déc. 2009 à 15:25
Merci pour la solution, c'est super.
Mais j'aimerai comprendre un minimum, enfin juste la regex que je n'ai pas compris.
Le . represente la chaîne entière
mais le \u et le & qui suit?
merci tu m'aides vraiment beaucoup c'est sympa
Mais j'aimerai comprendre un minimum, enfin juste la regex que je n'ai pas compris.
/./\u&/
Le . represente la chaîne entière
mais le \u et le & qui suit?
merci tu m'aides vraiment beaucoup c'est sympa
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
22 déc. 2009 à 15:42
22 déc. 2009 à 15:42
Le "." (point) représente un caractère, le 1er ici en l'occurrence.
le "\u" est un paramètre avancé dans la partie de substitution (celle de droite) qui permet de mettre le caractère qui suit en majuscule (u comme uppercase. L'anti-slash (\) sert à protéger le "u" afin qu'il soit interprété comme paramètre et non comme un caractère littéral).
Le "&" (esperluette) représente le motif mis en évidence dans la partie de substitution de gauche.
Donc on met en majuscule (\u) la partie mise en évidence (le 1er caractère) représentée par "&".
Tout ça est expliqué dans la FAQ sur sed...
le "\u" est un paramètre avancé dans la partie de substitution (celle de droite) qui permet de mettre le caractère qui suit en majuscule (u comme uppercase. L'anti-slash (\) sert à protéger le "u" afin qu'il soit interprété comme paramètre et non comme un caractère littéral).
Le "&" (esperluette) représente le motif mis en évidence dans la partie de substitution de gauche.
Donc on met en majuscule (\u) la partie mise en évidence (le 1er caractère) représentée par "&".
Tout ça est expliqué dans la FAQ sur sed...
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
1
22 déc. 2009 à 16:18
22 déc. 2009 à 16:18
dans ce cas là, on ne travaille que sur la première lettre, on ne vérifie donc pas la présence de majuscule dans le reste de la chaîne (en dehors de la première lettre).
Le tout est de trouver la bonne regex pour le motif de départ et la regex pour le motif de 'transformation' !?
Le tout est de trouver la bonne regex pour le motif de départ et la regex pour le motif de 'transformation' !?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
22 déc. 2009 à 17:03
22 déc. 2009 à 17:03
Je n'avais pas bien interprété l'énoncé et n'avais pas vu qu'il fallait mettre la 1ère lettre du nom en majuscule ET le reste en minuscule ;-\
Dans ce cas :
Dans ce cas :
sed 's/\(.\)\(.*\)/\u\1\L\2/'
djmic
Messages postés
70
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2010
1
22 déc. 2009 à 21:37
22 déc. 2009 à 21:37
merci Jicipy, ca fonctionne impeccablement.
Merci de passer du temps à aider les personnes.
Merci de passer du temps à aider les personnes.