Como obter string entre os dois últimos símbolos “/”

1

Estou usando o Bash. Eu tenho uma string de caminhos, como /dir0/dir1/dir2/filename.ext e eu quero extrair a string dir2 no bash. Você pode assumir que a palavra que eu quero extrair está localizada entre os dois últimos caracteres / .

Estou tentando combinar ## e % , mas com resultados ruins.

O que eu tentei e não funciona é cut=${${path%/*}##*/} .

Como posso fazer isso?

Resolvido mas procurando alternativas . Minha solução é a seguinte:

cut=$(tmp=${path%/*}; echo ${tmp##*/})

    
por Nisba 17.02.2018 / 16:11

4 respostas

2

Com o bash e um regex:

s="/dir0/dir1/dir2/filename.ext"
[[ $s =~ ([^/]*)/[^/]*$ ]] && echo "${BASH_REMATCH[1]}"

Saída:

dir2
    
por 17.02.2018 / 16:33
2

Outra maneira com o Bash (também dois passos).

IFS=/ read -a array <<<'/dir0/dir1/dir2/filename.ext'
echo ${array[ $(( ${#array[@]}-2 )) ]}
dir2
    
por 18.02.2018 / 01:01
1

Você precisa fazer a análise em etapas: -

path=/dir0/dir1/dir2/filename.ext
dir=${path%/*}
lastdir=${dir##*/}

Ao tentar combinar as duas operações de análise, você estava tentando usar uma string em vez de uma variável na segunda expansão: isso não é suportado.

Observe que você pode usar o mesmo nome de variável para dir e lastdir , por exemplo: -

cut=${path%/*}; cut=${cut##*/}

Você não disse que o seu shell é bash , mas eu assumi isso do seu exemplo de código.

    
por 17.02.2018 / 16:35
1

Resolveu usando o awk:

echo "/dir0/dir1/dir2/filename.ext" | awk -F'/' '{print $(NF-1)}'

A saída acima será:

dir2
    
por 21.02.2018 / 06:30