Extrai o nome do arquivo do arquivo usando o shell script

0

Eu tenho um arquivo de texto com a seguinte linha:

/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif

Eu quero extrair frtbla_mcdetc_0000149099_20101126135009990_1.tif ; a palavra depois da última barra ( / ).

    
por Grv 06.07.2015 / 14:07

5 respostas

1

Se você estiver em um ambiente semelhante ao Linux, poderá usar o utilitário basename :

basename $(<your_file)
    
por 06.07.2015 / 14:48
0

use este comando

cat text_file_name | cut -d '/' -f 6
    
por 06.07.2015 / 14:15
0

Se você souber o formato exato da estrutura de diretório e ela não for alterada, você poderá usar cut :

$ cut -f6 -d '/' file.txt

Aqui, use cut para tratar os separadores de diretório como um delimitador e extrair o 6º.

Se em vez disso tudo o que você sabe é que é a última parte de uma linha, mas não conhece a estrutura de diretórios , você também pode usar rev :

$ rev file.txt | cut -f1 -d '/' | rev

Aqui, o arquivo é invertido e o campo primeiro é extraído, antes de ser revertido novamente.

    
por 06.07.2015 / 14:16
0

O seguinte se aplica a todas strings em um shell, não apenas a nomes de arquivos, e é muito mais fácil do que recortar porque você não precisa saber quantos campos existem antes do que você deseja:

$ foo=/path/to/file/split/by/slashes.txt
$ echo ${foo##*/}
slashes.txt

Isso usa o "ajuste guloso", isto é, apara tudo até o último '/' como descrito aqui:

link

${foo  <-- from variable foo
  ##   <-- greedy front trim
  *    <-- matches anything
  /    <-- until the last '/'
 }
    
por 06.07.2015 / 15:06
0

Eu não sei qual é o shell padrão no Aix, mas bash está disponível e suporta expansão editada de variáveis.

Se o seu nome completo estiver na variável FileName , então ${FileName##*/} exibirá o nome com todos os caracteres principais excluídos até o último / ; por contraste ${FileName#*/} exclui até o primeiro / , enquanto ${FileName%/*} exclui caracteres finais do último / (ou seja, o caminho do diretório).

Se você gerar o nome do arquivo por um comando find , precisará de um comando como:

find ... | while read FileName; do echo ${FileName##*/}; done

Se estiver em um arquivo de texto:

while read FileName; do echo ${FileName##*/}; done < FileList.txt

Substitua o comando echo pelo processamento que você precisa fazer com o nome.

    
por 06.07.2015 / 15:24