Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

sputnick a écrit :

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  smile !

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

legaci a écrit :

J'étais parti d'un ancien script d'un certain sputnick  smile !

Ha smile 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

sputnick a écrit :

Ha smile 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 tongue

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

Alain.g a écrit :

Bonjour,

Autre solution avec prename :

rename '($a=$_)=~s/\D//g;s/^/$a\___/' *

héhé.. the big boss is back wink

Avec sputnick et toi, je peux partir en toute serraineté wink


-- 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

Totor a écrit :

est-ce voulu de ne pas renommer dans le même dossier ?

... mais je renomme dans le même dossier !

Totor a écrit :

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 hmm
(c pas très sympa pour mon code roll !)


-- 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

sputnick a écrit :

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.

Totor a écrit :

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