Selecione usando grep e sed

-1

Eu escrevi um script Bash para selecionar apenas o número nesta frase (abaixo) e copie-o em um arquivo.

siesta: Total = -29.649928

Aqui está a minha solução (pelo menos uma solução improvisada):

grep 'Total =' h2.$i.out >> data.dat
sed -i -e "s/"siesta:"/$i/g" "data.dat"
sed -i -e "s/"Total"//g" "data.dat"
sed -i -e "s/"="//g" "data.dat"

Você tem alguma recomendação?

    
por moumeneph 11.02.2018 / 21:24

1 resposta

2

Você pode fazer isso em uma linha:

grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat

Explicação:

  • -P Use o regex compatível com Perl (PCRE), que suporta uma correspondência de padrões muito mais avançada
  • -o Imprimir apenas parte correspondente da linha (neste caso, apenas o número)
  • \K Não considere o anterior como parte da correspondência (Este é um recurso da PCRE.)
  • .* Corresponde zero ou mais de qualquer caractere (exceto uma nova linha)

Para imprimir $i no arquivo na mesma linha que a saída do grep, execute printf '%s' "$i" >> data.dat antes do comando grep. Eu suponho que você está rodando dentro de um loop, então isso funcionaria assim:

for i in ...; do
    printf '%s' "$i" >> data.dat
    grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat
done
    
por wjandrea 12.02.2018 / 02:46