Estoy tratando de establecer una variable en un script sh para los últimos 3 caracteres del nombre base de un archivo (por nombre base quiero decir sin la ruta y sin el sufijo). He logrado hacer esto pero, por pura curiosidad, me pregunto si hay un comando único más corto que pueda usar. Originalmente tenía una sola línea awk
, pero fue bastante larga. Actualmente tengo este script de dos líneas (suponiendo que haya un nombre de archivo completo $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Entonces, por ejemplo, "/path/to/somefile.txt" termina con "ile" en $lastpart
.
¿Puedo combinar de alguna manera basename
y el bit para pelar el sufijo en un solo comando, y hay alguna forma de enviarlo tail
(o algo más que pueda usar) sin usar una tubería? El sufijo es desconocido, por lo que no puedo basarlo como un parámetro basename
.
El objetivo principal no es en realidad ser lo más corto posible, sino ser lo más legible posible de un vistazo. El contexto real de todo esto es esta pregunta en Superusuario , donde estoy tratando de encontrar una respuesta razonablemente simple.
two
funcionaría; la extensión en eso sería .three
, supongo.
file.one.two.three
? ¿Quieresile
otwo
?