Verifique se existe uma string de entrada no arquivo

1

Você deve ler string1 , o que devo fazer? Aqui está o meu código:

#!/bin/sh
echo "Enter your sting: "
read read string1
if [ grep -q $string1 file.txt ];then
   echo "Found it"
else
   echo "Sorry this string not in file"
fi
exit 0
    
por BigAlligator 27.03.2016 / 11:44

2 respostas

2
  • Seu comando read está errado, deve ser read string1 (e você deve usar -r para evitar que read manche barras invertidas: read -r string1 );
  • O teste também está errado, deve ser if grep -q $string1 file.txt , pois você não está avaliando a saída de grep , mas sim seu valor de retorno;
  • Você deve passar a opção -F para grep para evitar que interprete os metacaracteres de expressões regulares da seguinte forma: if grep -qF $string1 file.txt
  • Você deve colocar aspas duplas em $string1 para impedir uma possível expansão de nome de arquivo e / ou divisão de palavras: if grep -qF "$string" file.txt

Outras notas:

  • O exit 0 no final é redundante e não é realmente necessário, como se o script conseguisse chegar a esse ponto sem erros, retorna 0 de qualquer maneira;
  • O ShellCheck é um recurso muito útil para depurar scripts.

Assim, o script corrigido de acordo com o acima seria:

#!/bin/sh
echo "Enter your sting: "
read string1
if grep -qF "$string1" file.txt;then
   echo "Found it"
else
   echo "Sorry this string not in file"
fi
    
por kos 27.03.2016 / 12:36
0

Acho que é sempre melhor armazenar o resultado, o número de correspondências, neste caso, em uma variável.

Dito isto, você tem 2 opções, use grep -c para contar as linhas correspondentes

count=$(grep -c "$string1" file.txt)

Ou canalize as linhas correspondidas para wc de grep -o (-only-matches)

count=$(grep -o "$string1" file.txt | wc -l)

Este será o script completo com a segunda opção

#!/bin/sh
echo "Enter your string: "
read string1
count=$(grep -o "$string1" file.txt | wc -l)
if [ $count != 0 ];then
   echo "Found it ($count times)"
else
   echo "Sorry this string not in file"
fi
exit 0

Além disso, você escreveu read duas vezes.

    
por bistoco 27.03.2016 / 12:47