J'essaie de définir une variable dans un script sh sur les 3 derniers caractères du nom de base d'un fichier (par nom de base, je veux dire sans le chemin et sans le suffixe). J'ai réussi à le faire mais, par pure curiosité, je me demande s'il y a une commande unique plus courte que je peux utiliser. À l'origine, j'avais un monoplace avec awk
, mais c'était plutôt long. Actuellement, j'ai ce script à deux lignes (en supposant qu'un nom de fichier complet se trouve $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Ainsi, par exemple, "/path/to/somefile.txt" se termine par "ile" dans $lastpart
.
Puis-je en quelque sorte combiner basename
et le bit pour supprimer le suffixe en une seule commande, et existe-t-il un moyen de l'envoyer à tail
(ou autre chose que je peux utiliser) sans utiliser de canal? Le suffixe est inconnu, je ne peux donc pas le baser en tant que paramètre sur basename
.
L'objectif principal n'est pas vraiment d'être aussi court que possible, mais d'être aussi lisible d'un coup d'œil que possible. Le contexte réel de tout cela est cette question sur Superuser , où j'essaie de trouver une réponse assez simple.
two
fonctionnerait; l'extension sur ce serait .three
je suppose.
file.one.two.three
? Souhaitez-vousile
outwo
?