Como posso verificar se a string existe no arquivo

Como posso verificar se a string existe no arquivo

Atualmente estou escrevendo um script bash que deve verificar se a string exata 329,existe em myfile. Pesquisei na web e encontrei algumas respostas, mas não consigo usar -xparâmetros porque tenho mais números do que 329,em myfile. E sem o -xparâmetro também posso obter o Existsresultado 329, o que não quero.

Tentei;

if grep -xqFe "329," "myfile"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

E o resultado foi;

Not Exists

Dentro de myfile;

329, 2, 57

Como posso resolver isso?

Responder1

O -xnão é relevante aqui. Isso significa (de man grep):

-x, --line-regexp
       Select  only  those  matches that exactly match the whole line.
       For a regular expression pattern, this is  like  parenthesizing
       the pattern and then surrounding it with ^ and $.

Portanto, só é útil se você quiser encontrar linhas que não contenham nada além da string exata que você está procurando. A opção que você deseja é -w:

-w, --word-regexp
       Select  only  those  lines  containing  matches that form whole
       words.  The test is that the matching substring must either  be
       at  the  beginning  of  the  line,  or  preceded  by a non-word
       constituent character.  Similarly, it must be either at the end
       of  the  line  or followed by a non-word constituent character.
       Word-constituent  characters  are  letters,  digits,  and   the
       underscore.  This option has no effect if -x is also specified.

Isso corresponderá se você encontrar sua string de destino como uma "palavra" independente, como uma string cercada por caracteres "não-palavras". Você também não precisa do -Faqui, isso só é útil se o seu padrão contiver caracteres com significados especiais em expressões regulares que você deseja encontrar literalmente (por exemplo *), e você não precisa -ede nada, isso seria necessário se você quisesse para dar mais de um padrão. Então você está procurando:

if grep -wq "329," myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

Se você também quiser combinar quando o número é o último na linha, então não tem ,depois dele, você pode usar grep -Epara habilitar expressões regulares estendidas e então combinarqualquera 329seguido de vírgula ( 329,) ou a 329que esteja no final da linha ( 329$). Você pode combiná-los assim:

if grep -Ewq "329(,|$)" myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

Responder2

Outra alternativa pode ser:

if cat myfile | tr "," "\n" | grep -xqF "329"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

Cumprimentos

informação relacionada