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
basename
e dirname
imprime 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)"
:)