Usando o awk ou similar para encontrar a próxima palavra na saída de outro comando

4

Eu estou tentando determinar o Startsector de um arquivo .img de dentro de um script bash para que ele possa ser montado corretamente a partir do script. Eu tenho usado o comando file para encontrar facilmente o Startsector - como nunca tenho certeza de como extrair esse número da saída. Eu acho que a resposta está em usar o awk, mas eu não posso para a vida de mim compreender como fazê-lo.

Aqui está a saída do comando file para referência:

kemra102@kaon:~/Downloads$ file 2012-07-15-wheezy-raspbian.img
2012-07-15-wheezy-raspbian.img: x86 boot sector; partition 1: ID=0xc, starthead 130, startsector 8192, 114688 sectors; partition 2: ID=0x83, starthead 165, startsector 122880, 3665920 sectors, code offset 0xb8
kemra102@kaon:~/Downloads$ 
    
por kemra102 08.08.2012 / 22:23

2 respostas

2

É um pouco mais fácil com o sed ou o perl do que com o awk. Com sed: corresponde à linha inteira, procurando partition 1 seguido por startsector 1234 (ou qualquer outra sequência de dígitos) sem ; entre eles. Substitua toda a linha apenas pelo dígito e imprima o resultado. Você pode alterar partition 1 para partition 2 , é claro.

sed -n 's/^.*partition 1:[^;]* startsector \([0-9][0-9]*\).*$//p'

Com perl: procure por uma substring composta por partition 1 seguido por startsector 1234 sem ; entre; salve os dígitos após startsector em um grupo. Se houver uma correspondência, imprima os dígitos.

perl -l -ne '/partition 1:[^;]* startsector ([0-9]+)/ and print '
    
por Gilles 08.08.2012 / 22:49
2
file 2012-07-15-wheezy-raspdian.img     | \
    grep -oP '(?<=startsector )[0-9]+'  | \
    sed -n '1p'

Se você alterar 1 para qualquer outro número em sed -n '1p' , você receberá as outras ocorrências.

    
por con-f-use 08.08.2012 / 22:29

Tags