Usando o grep -Po para extrair o regex

1

Eu tenho lutado com o "grep -Po" por algumas horas.

O que eu gostaria de fazer é descobrir quantos bytes o tamanho do disco virtual é relatado pelo qemu-img info.

Veja o exemplo de saída:

$ qemu-img info 022eb199-954d-4c78-8550-0ea1d31111ec                                           
image: 022eb199-954d-4c78-8550-0ea1d31111ec
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 20G
cluster_size: 65536

E aqui está o que eu tenho tentado variações de:

$ qemu-img info 022eb199-954d-4c78-8550-0ea1d31111ec | grep -Po '\(([0-9]+).*\)'
(42949672960 bytes)

Mas eu gostaria apenas do número. Eu acho que estou lutando com a forma de dizer "grep -Po", que parte da regex eu gostaria de extrair. Eu pensei que o "(" colchetes faria isso.

Qualquer ajuda seria muito apreciada. :)

    
por curtis 04.06.2013 / 22:49

3 respostas

1

Você pode usar o corte duas vezes, por exemplo:

echo "virtual size: 40G (42949672960 bytes)"| cut -f 4 -d" "| cut -c 2-

Primeiro corte corte (42949672960, -f4 quarto campo, -d "" é o separador. O segundo corte corta 42949672960 -c2- (cortes do segundo caractere para o fim.

    
por 05.06.2013 / 00:49
1
qemu-img ... | grep -Po '[0-9]+(?= bytes)'

Isso está usando uma asserção , que corresponderá ao texto bytes , mas ganhou t incluí-lo na saída (porque a opção -o foi dada).

Tais asserções estão disponíveis quando a -P é alterada para grep é usada (o que a direciona para usar perl / pcre - como regex'es). Ambos -P e -o já foram usados na pergunta do OP e no título.

    
por 23.10.2018 / 04:54
0
echo "virtual size: 40G (42949672960 bytes)" | grep -Po '(?<=\()[^ ]*'

Corresponder à esquerda (a correspondência certa para o espaço

echo "virtual size: 40G (42949672960 bytes)" |grep -oP 'virtual.*\K(?<=\()[^ ]*'

Ou uma correspondência mais rigorosa para começar com o texto que começa com o virtual

    
por 23.10.2018 / 03:05

Tags