[Bash] Tri de fichiers et exp rationnelles
Résolu
Bonjour à tous.
Je suis en train d'écrire un script en Bash qui traite des fichiers.
2 problèmes se posent à moi:
>> premièrement, parmi les fichiers se trouvant dans un répertoire, je dois extraire le nom du dernier fichier dans l'ordre alphabétique croissant. Je crois qu'il faut se servir de ls, mais je n'y suis pas arrivé. Enfin, je suis tombé sur la commande
>> deuxièmement, il est question d'expressions rationnelles. Les fichiers à traiter ont un nom de ce type :
[chaîne de caractères][3 chiffres].extension
exemple : linux012.org
blablabla123.rpm
La chaîne de caractères comporte un nombre n de caractères, et uniquement des lettres.
Je voudrais enlever la chaîne de caractères et l'extension du nom des fichiers, pour extraire uniquement les chiffres. En clair, avec linux012.org, j'obtiendrai 012.
Je sais comment faire pour retirer l'extension. C'est la chaîne de caractères qui me pose problème. Je crois qu'il faut faire un truc du genre
>> bonus: comment fait-on pour extraire plusieurs motifs en une seule ligne?
Exemple, j'ai un fichier nprénom.doc. Comment faire pour obtenir prénom sans faire
puis
mais en une seule ligne?
Merci bien pour vos réponses.
Je suis en train d'écrire un script en Bash qui traite des fichiers.
2 problèmes se posent à moi:
>> premièrement, parmi les fichiers se trouvant dans un répertoire, je dois extraire le nom du dernier fichier dans l'ordre alphabétique croissant. Je crois qu'il faut se servir de ls, mais je n'y suis pas arrivé. Enfin, je suis tombé sur la commande
ls | cut -f 1 | tail -1mais c'est un peu du bricolage et je ne la comprends pas trop. Si vous aviez une solution plus élégante...
>> deuxièmement, il est question d'expressions rationnelles. Les fichiers à traiter ont un nom de ce type :
[chaîne de caractères][3 chiffres].extension
exemple : linux012.org
blablabla123.rpm
La chaîne de caractères comporte un nombre n de caractères, et uniquement des lettres.
Je voudrais enlever la chaîne de caractères et l'extension du nom des fichiers, pour extraire uniquement les chiffres. En clair, avec linux012.org, j'obtiendrai 012.
Je sais comment faire pour retirer l'extension. C'est la chaîne de caractères qui me pose problème. Je crois qu'il faut faire un truc du genre
$(nom_fichier#*[a-z]}mais ça n'enlève que la première lettre.
>> bonus: comment fait-on pour extraire plusieurs motifs en une seule ligne?
Exemple, j'ai un fichier nprénom.doc. Comment faire pour obtenir prénom sans faire
fichier=nprénom.doc
a=${fichier%.*}
puis
prénom=${a#[a-z]}
mais en une seule ligne?
Merci bien pour vos réponses.
A voir également:
- [Bash] Tri de fichiers et exp rationnelles
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Explorateur de fichiers - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
1 réponse
Je pense que tu veux parler d'expressions regulieres. Tu as les bases dans :
Mais je te suggère aussi de regarder quelques tuoriels pour te familiariser avec les regexp.
En fait je pense que ce que tu fais tu devrais le faire dans un langage un peu mieux que bash (genre plus simple, plus portable), comme par exemple python. En plus python c'est facile.
http://www.amk.ca/python/howto/regex/
PS : jamais d'accent sur les noms de variable (genre prénom) et autres caractères bizarres. Utilise juste des caractères alphanumeriques ou _.
man perlre
Mais je te suggère aussi de regarder quelques tuoriels pour te familiariser avec les regexp.
En fait je pense que ce que tu fais tu devrais le faire dans un langage un peu mieux que bash (genre plus simple, plus portable), comme par exemple python. En plus python c'est facile.
http://www.amk.ca/python/howto/regex/
PS : jamais d'accent sur les noms de variable (genre prénom) et autres caractères bizarres. Utilise juste des caractères alphanumeriques ou _.