Usando o comando grep para várias strings

0

Como escrevo lógica para

Test total=100
Test scored=80 
Tests failed=0

Eu preciso escrever em um arquivo bash o script para verificar se Test total , Test scored e Tests failed=0 existe em um arquivo. Eu preciso usar o comando grep .. mas como faço para verificar se há nova linha neste caso?

Além do número 100,80, não preciso procurar. Apenas o texto antes disso.

    
por user3800888 19.06.2017 / 04:35

3 respostas

1
    grep -e "Test total=[0-9][0-9]*$" -e "Test scored=[0-9][0-9]*$" -e "Tests failed=[0-9][0-9]*$" foofile

Considerando que você pretende unir as três primeiras linhas da entrada abaixo:

 Test total=100
 Test scored=80
 Tests failed=0

 Test total=100 alpha
 Test scored=80 beta
 Tests failed=0 gamma

 Test total=
 Test scored=
 Tests failed=
    
por 19.06.2017 / 04:47
0

Usando bash e grep, você pode testar o status de retorno de múltiplas chamadas grep em uma função como:

#!/usr/bin/env bash
failed_zero () {
    grep -q "Test total" "$1" || grep -q "Test scored" "$1" || grep -q "Test failed=0" "$1"
    return $?
}

# test first file name on command line
failed_zero $1
echo $?
    
por 19.06.2017 / 05:37
0

tente

found=$( egrep  "Test total|Test scored|Tests failed" -c  file )
if [ $found -eq 3 ]
then
  ## all three test
else
  ## some failed
fi

onde

  • egrep permite grep estendido, que é o uso de | (ou)
  • -c indica a contagem de linhas correspondentes.
  • $( ) retorna o resultado do comando como uma variável.
por 19.06.2017 / 06:59