#1 Le 03/12/2009, à 16:56
- legaci
[Résolu] Script : extraire les chiffres d'une chaîne de caractères
Bonjour,
J'écris (j'essaye) un script bash pour renommer des fichiers
J'ai une liste de fichiers de cette forme :
ville_2_rue_6_maison_3_rouge
Comment puis-je extraire les chiffres pour les renommer de cette façon
263___ville_2_rue_6_maison_3_rouge ?
Merci
Dernière modification par legaci (Le 04/12/2009, à 12:50)
Hors ligne
#2 Le 03/12/2009, à 17:07
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Bonjour:
#!/bin/bash
fichier="ville_2_rue_6_maison_3_rouge"
chiffres="$(sed 's/[^[:digit:]]//g' <<< "${fichier}")"
new_fichier="${chiffres}___${fichier}"
ou plus simplement :
#!/bin/bash
fichier="ville_2_rue_6_maison_3_rouge"
new_fichier="${fichier//[![:digit:]]}___${fichier}"
Dernière modification par Totor (Le 03/12/2009, à 17:09)
-- Lucid Lynx --
Hors ligne
#3 Le 03/12/2009, à 17:12
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Merci, je vais essayer de ce pas !
Hors ligne
#4 Le 03/12/2009, à 17:49
- sputnick
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Avec rename ( prename, celui en perl; en général c'est celui par défaut )
rename 's/(\D+_(\d+)_\D+_(\d+)_\D+_(\d+)_\D+)/$2$3$4_$1/' *fichiers
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 04/12/2009, à 10:04
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Avec rename ( prename, celui en perl; en général c'est celui par défaut )
rename 's/(\D+_(\d+)_\D+_(\d+)_\D+_(\d+)_\D+)/$2$3$4_$1/' *fichiers
j'adore la formule mais... je manque de bases pour comprendre !
merci quand même !
Hors ligne
#6 Le 04/12/2009, à 11:37
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
c'est pourtant ce qui est le plus approprié à ta demande (si et seulement si les fichiers ont toujours le même "pattern" comme nom de fichier)
-- Lucid Lynx --
Hors ligne
#7 Le 04/12/2009, à 12:49
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Merci, j'arrive à ce que je voulais grâce à la première soluce de Totor
J'étais parti d'un ancien script d'un certain sputnick !
Merci à vous deux et bon week-end !
Je passe en résolu.
Hors ligne
#8 Le 04/12/2009, à 15:31
- sputnick
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
J'étais parti d'un ancien script d'un certain sputnick !
Ha Lequel ?
Ma regexp est pas si compliquée, c'est juste que c'est la syntaxe perl qui peut surprendre au premier abord.
\d c'est un chiffre
\D c'est tout ce qui n'est pas un chiffre
( ) c'est les captures comme avec sed, on "ressort" la capture avec $1, $2... quand avec sed on utiliserait \1, \2...
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#9 Le 04/12/2009, à 17:43
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Ha Lequel ?
C'est ici :
http://forum.pcastuces.com/resolu___ren … 8s9909.htm
Merci encore !
Hors ligne
#10 Le 04/12/2009, à 18:58
- sputnick
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Erf, 12/07/2007 ca date, vla le bash à la one again
U're welcome...
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#11 Le 05/12/2009, à 10:08
- Alain.g
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Bonjour,
Autre solution avec prename :
rename '($a=$_)=~s/\D//g;s/^/$a\___/' *
Xubuntu Karmic !
Hors ligne
#12 Le 05/12/2009, à 13:22
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Bonjour,
Autre solution avec prename :
rename '($a=$_)=~s/\D//g;s/^/$a\___/' *
héhé.. the big boss is back
Avec sputnick et toi, je peux partir en toute serraineté
-- Lucid Lynx --
Hors ligne
#13 Le 08/12/2009, à 12:35
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Rebonjour les pros de la prog !
(je ne sais pas si je ferais mieux d'ouvrir un autre fil)
Suite à l'exercice précédent, j'ai dans plusieurs répertoires un fichier contenant 4 chiffres au lieu de 3.
Je ne veux pas intégrer le 4eme dans le renommage
ainsi :
ville_2_rue_6_maison_3_rouge et ville_2_rue_6_maison_4_rouge_2 ??
deviennent respectivement
263___ville_2_rue_6_maison_3_rouge et 264___ville_2_rue_6_maison_4_rouge_2
Voici le code que j'ai utilisé (mais qui m'extrait tous les chiffres) :
for file in ${rep}/* ; do
echo "Traitement du fichier $file."
chiffres="$(sed 's/[^[:digit:]]//g' <<< "${file##*/}")"
mv "$file" "$chiffres"___"${file##*/}"
done
Comment extraire seulement les 3 premiers chiffres ?
Dernière modification par legaci (Le 08/12/2009, à 12:37)
Hors ligne
#14 Le 08/12/2009, à 14:17
- sputnick
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
rename '($a=$_)=~s/\D|\d$//g;s/^/$a\___/' ville_2_rue_6_maison_4_rouge_2
Si le le dernier chiffre est toujours à la fin.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#15 Le 08/12/2009, à 14:45
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
A titre d'info, en utilisant le code que tu as actuellement :
for file in ${rep}/* ; do
echo "Traitement du fichier $file."
chiffres="$(sed 's/[^[:digit:]]//g' <<< "${file##*/}")"
mv "$file" "${chiffres:0:3}"___"${file##*/}"
done
Question : est-ce voulu de ne pas renommer dans le même dossier ?
Est-ce pour cela que tu n'utilises pas les solutions d'alain et de sputnick ?
EDIT :
En utilisant que du bash (suivant la volumétrie de fichier, cela peut devenir plus intéressant pour la durée de ton traitement - en secondes) :
expand()
{
[ $# -lt 2 ] && { echo "Nombre de parametre invalide."; return 1; } >&2
typeset nomVariable="$1" retour
typeset variable="${!nomVariable}"
shift
for param
do
variable="$(eval "echo \"\${variable${param}}\"")"
[ ${retour:=$?} -ne 0 ] && { echo "${!nomVariable}"; return ${retour}; }
done
echo "${variable}"
}
for file in ${rep}/* ; do
echo "Traitement du fichier $file."
mv "$file" "$(expand file "//[^[:digit:]]" ":0:3")___${file##*/}"
done
Dernière modification par Totor (Le 08/12/2009, à 15:00)
-- Lucid Lynx --
Hors ligne
#16 Le 08/12/2009, à 15:11
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
est-ce voulu de ne pas renommer dans le même dossier ?
... mais je renomme dans le même dossier !
Est-ce pour cela que tu n'utilises pas les solutions d'alain et de sputnick ?
comme expliqué plus haut, je suis parti d'un ancien code de sputnik.
c'est le code que je comprends le mieux
mon dernier cours date de 2000 et pas fait de prog depuis !
Hors ligne
#17 Le 08/12/2009, à 15:25
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
alors tu te trouves dans rep (puisque tu ne précises pas le dossier avec mv) ?
-- Lucid Lynx --
Hors ligne
#18 Le 08/12/2009, à 15:42
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
exact, j'ai fait un cd "$rep" auparavant
Hors ligne
#19 Le 08/12/2009, à 15:49
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
alors for file in ${rep}/* ; do est à remplacer par for file in * ; do
et ${file##*/} est à remplacer par ${file}
-- Lucid Lynx --
Hors ligne
#20 Le 08/12/2009, à 15:51
- sputnick
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Tant qu'à apprendre, autant apprendre des trucs puissants et propres. Ce qu'on te propose est pertinent et c'est pas si compliqué.
On peux décomposer chaque étape si tu en a besoin.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#21 Le 08/12/2009, à 15:58
- Totor
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
je suis bien d'accord mais il ne semble pas vouloire utiliser vos solutions
(c pas très sympa pour mon code !)
-- Lucid Lynx --
Hors ligne
#22 Le 08/12/2009, à 15:58
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
ah oui merci !
Je continue,
j'essaie d'entrer dans des sous-répertoires
et aussi de faire la manip inverse redonner les noms des fichiers originaux).
Je rappelle si ça coince (ce qui ne m'étonnerait pas)
Hors ligne
#23 Le 08/12/2009, à 16:18
- legaci
Re : [Résolu] Script : extraire les chiffres d'une chaîne de caractères
Tant qu'à apprendre, autant apprendre des trucs puissants et propres. Ce qu'on te propose est pertinent et c'est pas si compliqué.
On peux décomposer chaque étape si tu en a besoin.
je suis bien d'accord mais il ne semble pas vouloire utiliser vos solutions hmm
(c pas très sympa pour mon code roll !)
Désolé, les gars, mais
'($a=$_)=~s/\D|\d$//g;s/^/$a\___/'
ça me parle pas, ne m'en veuillez pas !
...mais si vous avez le temps, vous pouvez détailler/expliquer, on a une infirmerie ici avec de l'aspirine dedans !
Hors ligne