procura pela string exata no unix

2

Eu tenho um arquivo, xyz.txt , que tem uma string por linha.
Como pesquiso xyz.txt para uma correspondência exata?
Eu recebo uma string de entrada, por exemplo. defabc , de outro aplicativo.
Se defabc for encontrado, ele deve retornar verdadeiro , senão falso . Posso usar o regex em grep ?

Arquivo de amostra: xyz.txt:

abc
def
abc_def
def_abc
abcdef
defabc
uvx
    
por kumar2008 06.08.2015 / 02:41

2 respostas

3

Com a opção -F , grep procura correspondências exatas (recursos de regex desativados):

$ grep -F "defabc" xyz.txt
defabc

grep define um código de retorno apropriado para que possamos testar verdadeiro ou falso:

$ if grep -qF "defabc" xyz.txt; then echo True; else echo False; fi
True
$ if grep -qF "Defabc" xyz.txt; then echo True; else echo False; fi
False

Como só queremos que grep defina um código de retorno, a opção -q é usada para informar grep para ficar quieto (omitir a saída normal).

Restringindo a correspondência a palavras inteiras

Se quisermos corresponder defabc , mas não defabc1 , podemos adicionar a opção -w para restringir a correspondência a palavras inteiras:

if grep -qFw "defabc" xyz.txt; then echo True; else echo False; fi

man grep explica como grep define uma "palavra":

-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.

Capturando a saída em uma variável do shell

Para capturar a saída de um comando, usamos substituição de comando , que assume o formato $(...) :

$ r=$(if grep -qF "defabc" xyz.txt; then echo True; else echo False; fi)
$ echo $r
True

Capturando o código de saída em uma variável do shell

grep -qF "defabc" xyz.txt
r=$?

r será zero se houver uma correspondência, 1 se não houver ou 2 se algum outro erro ocorrer.

    
por 06.08.2015 / 02:53
0

Comando para pesquisar a expressão exata no Korn Shell do Unix

grep -w "SEARCH_EXPRESSION" FILE_TO_BE_SEARCHED

O comando acima pesquisa a palavra exata ou a expressão de pesquisa.

    
por 06.08.2015 / 09:57

Tags