Eu tenho um arquivo path.txt com o caminho para um arquivo (digamos, um arquivo txt):
/Folder/F1/F2/F3/F4/.../Fn/abc.txt
Quero extrair o caminho, ou seja, a string do início até a última ocorrência /
(já que o número da pasta no caminho pode variar).
Eu quero obter:
/Folder/F1/F2/F3/F4/.../Fn
Qual seria a melhor escolha: sed/awk/perl/vi e como?
Responder1
Se quiser usar uma dessas ferramentas que você mencionou, você pode fazer isso com sed
:
echo "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" | sed "s/\/[^/]*$//"
sed -i "s/\/[^/]*$//" path.txt
Se você estiver no bash, poderá usar a expansão de parâmetros do Bash para isso:
path=$(cat path.txt)
echo "${path%/*}"
E como mencionado porikkachuvocê pode usar dirname
.
Responder2
basename
e dirname
imprima a última e a última parte de um nome de arquivo fornecido como argumento, então:
$ dirname "/Folder/F1/F2/F3/F4/.../Fn/abc.txt"
/Folder/F1/F2/F3/F4/.../Fn
(ou de um arquivo: dirname "$(< pathname.txt)"
)