“operador inválido grep”

1
Echo enter file name
Read file
Echo enter pattren
Read pattren
If [ grep $pattern $file ]
Then
Echo pattern found
Else 
Echo not found
Fi

Quando executo isso, estou recebendo um erro como invalid operator grep

    
por Nand 28.02.2017 / 15:47

2 respostas

3

Aparentemente, você não quer verificar se existe uma string como grep $pattern $file , mas se há alguma saída do comando, então algo como [[ $(grep foo bar) ]] funcionaria. Ou, como apontou @steeldriver, você pode simplesmente verificar o status de saída de grep :

echo "enter file name: "
read file
echo "enter pattern: "
read pattern
if grep -q "$pattern" "$file"; then 
   echo "yeah, got it"
   else echo "nope, sorry, got nothing"
fi

Obviamente, corrija as tampas. Echo não é um comando.

    
por Zanna 28.02.2017 / 15:54
0

O comando test (também conhecido como [ ) possui operadores específicos, cuja lista você pode encontrar em man test manual. Portanto, [ grep $pattern $file ] está incorreto, já que você está dando argumentos [ 3 que não reconhece.

O que você provavelmente quer fazer é o que a Zanna mostrou - use grep dentro de uma declaração para avaliar apenas o status de saída. Alternativamente, você pode armazenar a saída de grep para a variável e verificar se essa variável é algo não vazio ao longo destas linhas:

output=$(grep "$pattern" "$file" 2> /dev/null)    
if [ -n "$output" ];
then
    echo "Got something"
else
    echo "Nothing"
fi

Com mais frequência, você verá algo assim na prática:

if [ "x$output" != "x" ]
then
    echo "Got something"
else
    echo "Nothing"
fi
    
por Sergiy Kolodyazhnyy 30.06.2017 / 22:58