grep: encontre uma string maior em uma string pequena

1

Estou escrevendo um pequeno script de shell para receber uma entrada e corresponder em um arquivo de texto.

No entanto, a entrada seria uma string maior que a string no arquivo, contra a qual eu quero uma correspondência.

Entrada do usuário:

abc-de-ef-gh1

Texto no arquivo:

This is test,-de-ef-gh,This is test

Eu quero um resultado positivo se eu grep de entrada do usuário com o arquivo existente.

Como posso conseguir isso? Eu não pude fazê-lo com grep.

    
por Novice 31.08.2018 / 11:07

2 respostas

1

Você tem um arquivo com padrões. grep pode ler os padrões com sua opção -f . Se você quiser verificar se uma string, $input , corresponde a um padrão em patterns.txt , você pode fazer

printf '%s\n' "$input" |
if grep -q -f patterns.txt; then
    echo 'matches'
else
    echo 'does not match'
fi

Isso executaria grep sobre o conteúdo da string com os padrões em patterns.txt . Em bash , você poderia usar uma string here:

if grep -q -f patterns.txt <<<"$input"; then
    echo 'matches'
else
    echo 'does not match'
fi

O -q para grep da saída de produção (estamos interessados apenas no status de saída).

Se os padrões forem sequências fixas (não expressões regulares), use -F com grep além dos outros sinalizadores ( grep -qF -f ... ).

    
por 31.08.2018 / 11:37
0

Usando bash , cut e grep :

read -p "Hey user, input something: " $n
printf "Match "
grep -m 1 -q -f <(cut -d, -f2 file) <<< "$n" || printf "not "
printf "found.\n"

Notas:

  • É impossível procurar por uma string mais longa em um curto, mas isso é realmente sobre encontrar se strings mais curtas em arquivo correspondem a uma string mais longa.
  • cut é usado para extrair o campo do meio de arquivo
  • grep procura esse campo do meio na string de entrada do usuário.
  • printf fornece algum feedback.
por 02.09.2018 / 07:27