Como extrair string entre as ocorrências Nth e Mth de um padrão?

0

Eu tenho um arquivo path.txt com o caminho para um arquivo (digamos, um arquivo txt):

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

Eu quero extrair o caminho, ou seja, a string do início até a última ocorrência de / (pois o número da pasta no caminho pode variar).

Eu quero receber:

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

Qual seria a melhor escolha: sed / awk / perl / vi e como?

    
por user176713 25.06.2016 / 10:16

2 respostas

2

Se você quiser usar uma dessas ferramentas mencionadas, faça isso com sed :

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

Se você está no bash, você pode usar a expansão de parâmetro Bash para isso:

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

E, como mencionado por ikkachu , você pode usar dirname .

    
por 25.06.2016 / 10:35
2

basename e dirname imprimem as últimas e todas as últimas partes de um nome de arquivo dado 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)" )

    
por 25.06.2016 / 10:29