Extraindo n caracteres de uma linha de teste

1

Como posso extrair os 6 caracteres depois de Z na seguinte linha de texto e colocá-los em um arquivo usando grep, egrep, sed ou awk?

B1_Site4_5aT4ZNHN691AQSB6B65_KYEC_SLT_2013-11-24-00-30_935985e7_100m_PASS1.tar

    
por fariborz barman 10.01.2014 / 22:30

3 respostas

3

file="B1_Site4_5aT4ZNHN691AQSB6B65_KYEC_SLT_2013-11-24-00-30_935985e7_100m_PASS1.tar"

com o GNU grep quando construído com suporte a PCRE (e com zsh ou versões recentes de ksh93 ou bash para <<< ):

grep -oP '(?<=Z).{6}' <<< "$file" > file

com ksh93 , bash ou versões recentes de zsh :

tmp=${file#*Z}              # remove chars up to the first Z
echo "${tmp:0:6}" > file

Apenas por diversão, awk

awk -F Z '{print substr($2, 1, 6)}' <<< "$file"
    
por 10.01.2014 / 22:39
3
expr B1_Site4_5aT4ZNHN691AQSB6B65_KYEC_SLT_2013-11-24-00-30_935985e7_100m_PASS1.tar : '.*Z\(.\{6\}\)' > file

Ou apenas com o shell

string=B1_Site4_5aT4ZNHN691AQSB6B65_KYEC_SLT_2013-11-24-00-30_935985e7_100m_PASS1.tar
printf '%.6s\n' "${string#*Z}" > file

(o primeiro irá considerar o último Z seguido por 6 caracteres, o segundo o primeiro; o comportamento irá variar se não houver o ZXXXXXX).

    
por 10.01.2014 / 22:42
2
>>echo \
B1_Site4_5aT4ZNHN691AQSB6B65_KYEC_SLT_2013-11-24-00-30_935985e7_100m_PASS1.tar |
sed 's/.*Z\(.\{6\}\).*//'
>>NHN691

Adicionar um >file irá colocá-lo em um arquivo.

    
por 10.01.2014 / 22:40

Tags