paulo1205
(usa Ubuntu)
Enviado em 06/10/2015 - 16:22h
zwe escreveu:
Até ai tudo bem, porem se eu colocar em nomes.txt uma palavra que comece com (de), ele não pega o decio. Sabe me dizer o porque?
Que comece com "de" ou igual a "de"?
O problema é que o grep (e seus derivados: egrep e fgrep) não trabalha com palavras, mas com pedaços de texto que só são limitados, além de pelo escopo de linha, pela regra de formação que você especificar. Se você quiser limitar a pegar palavras inteiras, e não pedaços de palavras, tem de caracterizar uma palavra usando a sintaxe que o grep lhe dá.
Eis como você poderia pegar a palavra "decio" com o egrep, ainda permitindo variações de maiúsculas e minúsculas.
egrep -i '(^|[[:space:][:punct:]])decio([[:space:][:punct:]]|$)'
Explicação: os parênteses permitem escrever subexpressões. Dentro de cada subexpressão, eu usei a barra vertical para indicar alternativas exclusivas, mas que igualmente satisfazem a subexpressão como um todo. Por fim, os colchetes permitem especificar conjuntos de caracteres que igualmente satisfazem a busca se algum dos caracteres do conjunto for achado naquela posição. Dentro dos colchetes, para não ter de especificar cada caráter possível, pode-se especificar por nome uma classe de caracteres. Por fim, os carcateres “^” e “$” têm respectivamente os sentido de “início da linha” e “fim da linha”. Desse modo, a expressão acima significa que o egrep vai pegar (ou rejeitar, se você acrescentar um -v) a palavra "decio" que imediatamente suceda o início da linha ou um sinal de pontuação ou espaço, e que seja sucedida por um sinal de pontuação ou espaço ou pelo fim da linha.