Como obter alguma parte da string no linux

0

A saída do comando find é como

/home/user/test/folder1/abc.png

Agora eu quero pegar

folder1

da string acima

    
por Mirage 20.04.2011 / 19:15

5 respostas

5

Você está procurando essa parte do caminho com base em um local fixo à esquerda do caminho ou profundidade fixa a partir da direita? Se você está olhando da esquerda, você pode fazer isso facilmente com o corte usando '/' como um separador de campo e pegando o quarto campo assim:

find ... | cut -d/ -f4
    
por 20.04.2011 / 21:06
3
path=/home/user/test/folder1/abc.def
folder=$(basename $(dirname $path))

ou, se você quiser operar na saída do find (ou seja, vários caminhos, um por linha)

find ... | awk -F/ '{print $(NF-1)}'
find ... | sed 's#.*/\([^/]*\)/[^/]*$##'
    
por 20.04.2011 / 20:48
1

Eu usaria o awk.

Algo como:

find /home -name "abc.png" | awk -F"/" '{print $5}'
    
por 20.04.2011 / 20:49
0

Se você quiser "folder1", digite "folder1" ...

Se você quiser o penúltimo componente de caminho, isso funciona em sh e bash :

dir=${path%/*}
dir=${dir##*/}

(assumindo que $path contém o caminho completo)

    
por 20.04.2011 / 19:55
0

Aqui está minha tentativa:

find . -name abc.png -exec dirname {} \; |grep -o '[^/]*$'
    
por 20.04.2011 / 20:16