sélectionner la dernière ligne d'une sortie

Bonjour,

j’ai un dossier ~/test/
contenant image01.jpg image02.jpg image03.jpg

Je fais
cnt=ls -cr ~/test/ | grep .jpg | tr -d '[a-z+.]'
ce qui sort
01
02
03

J’aimerais récupérer la dernière ligne de cette sortie dans cnt, quelle commande permettrait celà ? (il faut absolument que ce soit la dernière, qu’il y en ai 1, 3 ou 200).

tu fais un «| tail -n 1»

merci beaucoup !

Pourquoi tant de haine à utiliser d’autres outils que ceux founis par bash ?

IFS=$'\n' fichiers=( $(ls -1c ~/test/*.jpg) )
dernier_fichier_modifie=${fichiers[0]//[^0-9]}

Et encore “ls” est utilisé car tu cherches a avoir le dernier modifié. Mais sinon, si c’est le dernier par ordre alphabétique :

fichiers=( ~/test/*.jpg )
dernier_fichier=${fichiers[$((${#fichiers[@]}-1))]//[^0-9]}

si tu me trouves un tuto correct sur les expressions, régulières, à la limite… Là pour moi c’est du chinois, et ça ne sert à rien que j’utilise des choses complêtement obscures.

et si c’est compatible avec la plupart des shell, ou au moins les forks de bash.

Désolé, je n’ai pas de tuto à te fournir car j’ai tout appris en lisant le “man”.
Après, j’ai le sentiment que tu utilises zsh et non bash. Qu’importe, normalement zsh est compatible bash.

Note : il n’y a rien de complexe dans ce que je t’ai proposé. Seuls les tableaux et ce que l’on appelle le développement de nom sont utilisés.
Le développement de nom, c’est (pour schématiser) l’utilisation de jokers pour référencer un ensemble de noms de fichiers (ici ~/test/.jpg). C’est le pattern. Au moment où bash interprète la ligne du script, il remplace le pattern (s’il n’est pas protégé par des guillemets ou quote) par l’ensemble des fichiers correspondant. C’est ainsi qu’est constitué le tableau : fichiers=( ~/test/.jpg )
~/test/*.jpg est remplacé par tous les fichiers correspondants.

un tableau se crée (entre autre) en délimitant tous les éléments par des parenthèses ouvrante et fermante. Il est également possible de les ajouter un à un.

Puis, on accède aux éléments du tableau avec la notation ${nomtableau[indiceElement]}
enfin, pour connaitre le nombre d’éléments d’un tableau, la syntaxe est la suivante : ${#nomtableau[@]}

la notation $((…)) permet d’effectuer des calculs.

la notation ${variable//pattern} (${fichiers[0]//[^0-9]}) permet de remplacer tout ce qui correspond à pattern dans variable par “rien”.
ici : variable = fichiers[0] c’est donc le premier élément du tableau (les indices commence à 0)
pattern = [^0-9] c’est à dire tout ce qui n’est pas “chiffre” (le caractère ^(ou !) permet d’indiquer l’inverse)

Voilà pour faire au plus simple car il y a des particularités à ces instructions.