Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT] faire un mv avec regex (résolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Tony Clifton
l33t
l33t


Joined: 07 Jul 2004
Posts: 686
Location: Rennes

PostPosted: Sun Jun 27, 2010 12:53 pm    Post subject: [SCRIPT] faire un mv avec regex (résolu) Reply with quote

Bonjour,

je souhaiterais remplacer la syntaxe de plusieurs répertoires. La syntaxe que j'utilise actuellement est du type :
Code:
champ1/champ2 - champ3 (champ4)

et je voudrais me retrouver avec cela :
Code:
champ1/champ2 - champ3 - champ4


Je pense donc que cette modification doit facilement être opérable en utilisant des REGEX. Cependant je n'y connait absoluement rien aux REGEX, mais cela m'intéresse fortement. Ce petit exercice pourrait donc être une bonne initiation.

Comment puis-je me débrouiller, dois-je faire un script en Perl ou du BASH suffit amplement… ?
_________________
La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges


Last edited by Tony Clifton on Sun Jun 27, 2010 9:13 pm; edited 1 time in total
Back to top
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1677
Location: 127.0.0.1

PostPosted: Sun Jun 27, 2010 5:00 pm    Post subject: Reply with quote

Hello,

Avec awk :
Code:

$ echo 'champ1/champ2 - champ3 (champ4)' | awk '{print gensub(/(.+)\/(.+) - (.+) \((.+)\)/, "\\1/\\2 - \\3 - \\4", "g")}'
champ1/champ2 - champ3 - champ4

Te reste plus qu'à faire le mv.
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Sun Jun 27, 2010 7:52 pm    Post subject: Reply with quote

Y'a rename pour ces choses là, non?
Back to top
View user's profile Send private message
Poussin
l33t
l33t


Joined: 08 Jun 2007
Posts: 659
Location: Liège

PostPosted: Sun Jun 27, 2010 8:05 pm    Post subject: Reply with quote

Je vais ptete dire une connerie, mais le rename qui permet ces choses là est le rename posix, non dispo dans portage. Mais renamexm fonctionne (mais le nom du paquet, c'est sys-apps/rename)

enfin voilà ^^
Back to top
View user's profile Send private message
Tony Clifton
l33t
l33t


Joined: 07 Jul 2004
Posts: 686
Location: Rennes

PostPosted: Sun Jun 27, 2010 8:39 pm    Post subject: Reply with quote

netfab wrote:
Hello,

Avec awk :
Code:

$ echo 'champ1/champ2 - champ3 (champ4)' | awk '{print gensub(/(.+)\/(.+) - (.+) \((.+)\)/, "\\1/\\2 - \\3 - \\4", "g")}'
champ1/champ2 - champ3 - champ4

Te reste plus qu'à faire le mv.


MERCI !

Alala, awk… que deviendrait-on sans ?
Il faudrait juste que je sache faire autre chose que '{ print $1 }' et compagnie.
Pourtant le manuel est très clair :
man wrote:
gensub(r, s, h [, t]) Search the target string t for matches of the regular expression r. If h is a string beginning with g or G, then replace all matches of r with s.
Otherwise, h is a number indicating which match of r to replace. If t is not supplied, $0 is used instead. Within the replacement text s, the
sequence \n, where n is a digit from 1 to 9, may be used to indicate just the text that matched the n'th parenthesized subexpression. The sequence
\0 represents the entire matched text, as does the character &. Unlike sub() and gsub(), the modified string is returned as the result of the
function, and the original target string is not changed.

_________________
La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Sun Jun 27, 2010 11:29 pm    Post subject: Reply with quote

ipop, puisque tu sembles vouloir découvrir, j'en profite pour t'introduire une manière de le faire en sh
Code:
for file in rep1/* rep2/* ; do
new="${file%(*}"
[ "$new" = "$file" ] && continue
tail="${file##*(}"
tail="${tail%)}"
new="${new}- $tail"
echo "mv -v -- \"$file\" \"$new\""
done

_________________
The End of the Internet!
Back to top
View user's profile Send private message
Tony Clifton
l33t
l33t


Joined: 07 Jul 2004
Posts: 686
Location: Rennes

PostPosted: Mon Jun 28, 2010 2:00 pm    Post subject: Reply with quote

truc wrote:
ipop, puisque tu sembles vouloir découvrir, j'en profite pour t'introduire une manière de le faire en sh
Code:
for file in rep1/* rep2/* ; do
new="${file%(*}"
[ "$new" = "$file" ] && continue
tail="${file##*(}"
tail="${tail%)}"
new="${new}- $tail"
echo "mv -v -- \"$file\" \"$new\""
done


Merci, ça me permet de me perfectionner en shell ;-).

Cependant je crois qu'il y a une erreur 8) :
Code:
tail="${file##*'('}

au lieu de
Code:
tail="${file##*(}"


Mais je ne saurais pas expliquer pourquoi ça marche dans le « new="${file%(*}" » mais pas là.
_________________
La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Mon Jun 28, 2010 2:46 pm    Post subject: Reply with quote

Code:
file="adfaf (asdf)"
echo "${file##*(}"
asdf)

Je ne semble pas avoir d'erreur de mon côté, c'est bizarre :?:
_________________
The End of the Internet!
Back to top
View user's profile Send private message
Tony Clifton
l33t
l33t


Joined: 07 Jul 2004
Posts: 686
Location: Rennes

PostPosted: Mon Jun 28, 2010 4:22 pm    Post subject: Reply with quote

Ah curieux, j'viens de faire un test :
Code:
pa@pag-port ~ $ file="adfaf (asdf)"
pa@pag-port ~ $ echo "${file##*(}"
adfaf (asdf)
pa@pag-port ~ $ /bin/bash
pa@pag-port ~ $ file="adfaf (asdf)"
pa@pag-port ~ $ echo "${file##*(}"
asdf)

_________________
La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges
Back to top
View user's profile Send private message
Poussin
l33t
l33t


Joined: 08 Jun 2007
Posts: 659
Location: Liège

PostPosted: Mon Jun 28, 2010 4:48 pm    Post subject: Reply with quote

ou alors tu mets tout ça dans un fichier bash ...
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Mon Jun 28, 2010 9:25 pm    Post subject: Reply with quote

space! bash est ton shell par défaut pourtant? (j'entends par là, le shell dans lequel tu as fait le test qui à échoué?

Des paramètres particulier ou que sais-je encore?

Le test fonctionne bien avec dash qui se veut posix, j'aurai donc envie de dire que ça devrait fonctionner! Mais, je loupe peut-être quelque chose?
_________________
The End of the Internet!
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum