regex, apenas a primeira ocorrência

0

Eu tenho uma saída em pipeline de free -o -m | awk '{print $4}' Eu quero dar um passo a passo dois números na primeira e na segunda linha. Então eu preciso de dois regexes. Eu tentei com ^[0-9]{1,3}$ , mas isso corresponde a todas as ocorrências. isto é     111     222     333

Eu quero apenas 111 por primeiro e 222 por segundo regex.

    
por Yurij73 08.02.2013 / 16:59

2 respostas

1

Sua pergunta é um pouco atrasada.

Você provavelmente quer algo como:

free -o -m | awk '
  $1 == "Mem:" {print "do something with " $4}
  $2 == "Swap:" {print "do something with " $4}'

Algo como:

eval "$(free -o -m | awk '
  $1 == "Mem:" {print "free_mem=" $4}
  $1 == "Swap:" {print "free_swap=" $4}'
)"
printf "%s\n" "Free mem: $free_mem" "Free swap: $free_swap"
    
por 08.02.2013 / 19:34
1

Acho que ainda não entendi completamente o que você está perguntando aqui. Mas free -o -m | awk '{print $4}' fornece a você a saída do formulário:

shared
123
456

Para verificar 123 e 456 em relação a uma condição no bash, você pode usar um loop for em vez de violar com regexes:

for value in 'free -o -m | awk '{print $4}''; do 
    if [[ "$value" != "shared" && CONDITION ]]; then echo "$value matched my condition"; fi; 
done;
    
por 08.02.2013 / 19:19