Cómo obtener la parte de la subcadena de un directorio con el comando Shell

Cómo obtener la parte de la subcadena de un directorio con el comando Shell

Necesitaría extraer solo las últimas 2 partes de la siguiente ruta del directorio usando el comando Shell

"Android/2.1/Paquetes/prueba/depuración/"

Salida esperada: /test/debug

Esta ruta es la dinámica donde cambiaría con un valor de ruta diferente como tal "Android/2/Pipeline/Packages/test/debug/"

No pude encontrar la expresión regular específica que puede extraer las últimas 2 partes, incluso el resto del valor de la ruta mantiene el cambio, es decir, solo para obtener '/test/debug'

Agradezco si alguien puede ayudar en esto.

Gracias

Respuesta1

Supongo que hay muchos enfoques que podrías probar (reemplazando pwd con algo adecuado para tu caso de uso):

echo /$(basename $(dirname $(pwd)))/$(basename $(pwd))

o

pwd | awk -F/ '{print "/" $(NF-1) "/" $(NF)}'

Y probablemente de muchas otras maneras. . .

Respuesta2

El shell puede hacer esto indirectamente con modificadores de variables %, %%y . Estos eliminan la coincidencia inicial o final del patrón dado. Tenga en cuenta que el patrón es un caparazón.###globo, no una expresión regular.

El siguiente ejemplo imprimirá los dos últimos elementos de la ruta, con o sin el final opcional/

$ in="Android/2/Pipeline/Packages/test/debug/"
$ echo $( t=${in%/} && t=${t%/*/*} && echo ${in##$t} )
/test/debug/

información relacionada