#1 Le 07/01/2019, à 21:08
- tymop
[RESOLU] sed supprimer une partie d'une chaine de carractère
Bonsoir,
Je viens vers vous, car je coince avec le renommage de fichiers qui sont sous la forme
"NomFichier-suiteNomFichier-<une suite de caractères inconnue>.mp3"
Je voudrais supprimer ce qu'il y a après le dernier '-' soit : -<une suite de caractères inconnue>, afin d'avoir le nom de fichier suivant: "NomFichier-suiteNomFichier.mp3"
voici ou j'en suis sur ma ligne de commande
for fichiers in *.mp3; do echo $fichiers | sed -e 's/\(.*\)-*.mp3/\1.mp3/'; done
Or, ça ne marche pas vraiment.
Pouvez vous m'aider SVP?
MErci.
Dernière modification par tymop (Le 09/01/2019, à 11:54)
Hors ligne
#2 Le 07/01/2019, à 21:45
- pingouinux
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Bonsoir,
Essaye ceci :
for fichiers in *.mp3; do sed -r 's/(.*)-.*/\1.mp3/' <<<"$fichiers"; done
Hors ligne
#3 Le 07/01/2019, à 21:46
- jamesbad000
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Bonsoir
Pas loin, mais
-*. devient -.*\.
sed -e 's/\(.*\)-.*\.mp3/\1.mp3/'
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#4 Le 07/01/2019, à 22:00
- pingouinux
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Un peu plus simple :
for fichiers in *.mp3; do sed -r 's/-[^-]*\././' <<<"$fichiers"; done
Et pour renommer les fichiers :
rename -n 's/-[^-]*\././' *.mp3 # Pour voir l'action de la commande sans rien faire
rename 's/-[^-]*\././' *.mp3 # Pour renommer les fichiers si c'est bon
Hors ligne
#5 Le 08/01/2019, à 02:07
- Watael
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
for fichier
sans S : une boucle for itère un élément à la fois.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Le 08/01/2019, à 15:58
- MicP
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Bonjour
Simplement avec bash
et sans utiliser la commande sed :
michel@debg53sw:~$ ls -1 *.mp3
nom-fichier-N° 1-après le dernier tiret.mp3
nom-fichier-N° 2-après le dernier tiret.mp3
nom-fichier-N° 3-après le dernier tiret.mp3
nom-fichier-N° 4-après le dernier tiret.mp3
michel@debg53sw:~$ for fichier in *.mp3; do mv "$fichier" "${fichier%-*}.mp3"; done
michel@debg53sw:~$ ls -1 *.mp3
nom-fichier-N° 1.mp3
nom-fichier-N° 2.mp3
nom-fichier-N° 3.mp3
nom-fichier-N° 4.mp3
michel@debg53sw:~$
Dernière modification par MicP (Le 09/01/2019, à 15:28)
Hors ligne
#7 Le 08/01/2019, à 16:09
- jamesbad000
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Encore plus simple avec la force
Dernière modification par jamesbad000 (Le 08/01/2019, à 16:12)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#8 Le 09/01/2019, à 11:54
- tymop
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Merci à tous pour votre aide.
Ca a fonctionné impec avec le sed.
Au prochain lot, j'aissaierai la méthode en bash directement. Je ne savais pas que c'était possible.
Hors ligne
#9 Le 09/01/2019, à 15:21
- MicP
Re : [RESOLU] sed supprimer une partie d'une chaine de carractère
Pour info :
michel@debg53sw:~$ maVar="un texte avant-texte après le premier-texte après le second"
michel@debg53sw:~$ echo ${maVar%%-*}
un texte avant
michel@debg53sw:~$ echo ${maVar%-*}
un texte avant-texte après le premier
michel@debg53sw:~$ echo ${maVar#*-}
texte après le premier-texte après le second
michel@debg53sw:~$ echo ${maVar##*-}
texte après le second
michel@debg53sw:~$ echo ${maVar/texte/blabla}
un blabla avant-texte après le premier-texte après le second
michel@debg53sw:~$ echo ${maVar//texte/blabla}
un blabla avant-blabla après le premier-blabla après le second
Dernière modification par MicP (Le 09/01/2019, à 15:25)
Hors ligne