¿Cómo extraer una cadena entre las apariciones Nth y Mth de un patrón?

¿Cómo extraer una cadena entre las apariciones Nth y Mth de un patrón?

Tengo un archivo path.txt con la ruta a un archivo (digamos un archivo txt):

/Folder/F1/F2/F3/F4/.../Fn/abc.txt

Quiero extraer la ruta, es decir, la cadena desde el principio hasta la última aparición /(ya que el número de carpetas en la ruta puede variar).

Quiero tener:

/Folder/F1/F2/F3/F4/.../Fn

¿Cuál sería la mejor opción: sed/awk/perl/vi y cómo?

Respuesta1

Si desea utilizar una de esas herramientas que mencionó, puede hacerlo con sed:

echo "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" | sed "s/\/[^/]*$//"
sed -i "s/\/[^/]*$//" path.txt

Si estás en bash, puedes usar la expansión de parámetros de Bash para esto:

path=$(cat path.txt)
echo "${path%/*}"

Y como lo mencionaikkachupuedes usar dirname.

Respuesta2

basenamee dirnameimprime la última y casi la última parte de un nombre de archivo dado como argumento, entonces:

$ dirname "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" 
/Folder/F1/F2/F3/F4/.../Fn

(o desde un archivo dirname "$(< pathname.txt)" :)

información relacionada