Como usar sed no Linux para obter valores do nome do arquivo?

1

Como posso recuperar cada parte separadamente do seguinte nome de arquivo?

DSA4020_frontcover_20346501_2011-05.doc

Eu quero recuperar as informações abaixo:

name = DSA4020
type = frontcover
id =  20346501
date = 2011-05

É possível fazer isso com sed?

    
por Himalay 26.05.2011 / 16:04

5 respostas

1

Que tal esta receita ' sed '?

echo "DSA4020_frontcover_20346501_2011-05.doc"  \
 | sed 's|\([^_]*\)_\([^_]*\)_\([^_]*\)_\([^\.]*\).*|name=,type=,id=,date=|'

fornece este ótimo formulário CSV,

name=DSA4020,type=frontcover,id=20346501,date=2011-05
    
por 26.05.2011 / 17:07
0

Você pode usar o seguinte para dividir a cada _ depois de remover a extensão:

$ echo "DSA4020_frontcover_20346501_2011-05.doc" | cut -d. -f-1 | cut -d_ -f1
DSA4020

Substitua o último dígito por 2, 3, 4 para obter o valor individual de cada vez.

    
por 26.05.2011 / 16:28
0

Se o número de campos for constante:

for i in 1 2 3 4 5; do  
    VARS[${i}]=$(echo ${yourfilename} | cut -d _ -f${i})
done

Em seguida, acesse $ {VARS [i]} ...

Alternativa:

VARS[${i}]=$(echo ${yourfilename} | awk -v i=${i} -F_ '{print $i}'

E, se suportado (bash 3 +)

for i in {1..5}; do (...)

Se você tiver vários nomes de arquivos, basta adicionar um for loop para percorrer todos eles.

    
por 26.05.2011 / 16:28
0

Divida o nome do arquivo e armazene em parâmetros posicionais:

set -- $(sed 's/_/ /g' <<< ${filename%.doc})
name=$1
type=$2
id=$3
date=$4
    
por 26.05.2011 / 17:08
0

Tente isto:

echo "DSA4020_frontcover_20346501_2011-05.doc" | awk -F '_' '{print " name =" $1 "\n type =" $2 "\n id =" $3 "\n date =" $4 } '

a saída será assim:

name = DSA4020
type = frontcover
id = 20346501
date = 2011-05
    
por 22.01.2013 / 16:46

Tags