Eu tenho um arquivo de texto:

deiauk 1611516 afsdf 765 minkra 18415151 asdsf 4152 linkra sfsfdsfs sdfss 4555 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4 deiauk 1611516 afsdf ddfgfgd luktol1 4545 4 9 luktol 1 

e eu deseja corresponder exatamente a deiauk. Quando eu faço isso:

grep "deiauk" file.txt 

Eu obtenho este resultado:

deiauk 1611516 afsdf 765 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4 

mas eu só preciso disso:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Eu sei que há uma opção “sa -w, mas então minha string deve ser inteira linha.

Comentários

  • Você realmente tentou grep -w? (Essa opção é exatamente para essa finalidade e funciona para mim.) – Observação: a opção -x corresponde a toda a linha.
  • " Quero corresponder exatamente a deiauk / " Só preciso disso: deiauk 1611516 afsdf 765 " – de qual você precisa?

Resposta

Tente um dos seguintes:

grep -w "deiauk" textfile grep "\<deiauk\>" textfile 

Comentários

  • Se tiver um travessão () no final da string, este script trará como resultado, o que não era esperado.
  • Corrija @Eve rt: As palavras incluem apenas caracteres alfa, dígitos e sublinhados, então se você tiver abreviações ou outros itens hifenizados, isso não funciona.
  • @Cyrus Eu aprendi o segundo enquanto usava vi / vim * comando em palavras.
  • Não funciona para nenhum caractere especial que tenha, por exemplo, org.apache.avro avro greped com org.apache.avro avro+mapred (tentado com *)
  • Use -wE para o exato correspondência de várias palavras (booleano OR)

Resposta

Tente isso com GNU grep e marcar os limites das palavras com \b:

grep "\bdeiauk\b" file 

Resultado:

 deiauk 1611516 afsdf 765 

Veja: http://www.regular-expressions.info/wordboundaries.html

Comentários

  • Obrigado, mas por que isso não está funcionando para mim? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Experimente grep "\b${vard}\b" file.txt
  • ainda não ' não funciona: /
  • Você ' precisará read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Resposta

Se o seu grep suporta -P (PCRE), você pode fazer:

$ grep -P "(^|\s)\Kdeiauk(?=\s|$)" file.txt deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Comentários

  • Esta é a única resposta que funciona com palavras hifenizadas.
  • Por que \K ( PCRE reset (início da partida) necessário? Esta solução proposta parece funcionar bem sem ela.

Resposta

Dependendo de seus dados reais, você poderia procure a palavra seguida por um espaço:

grep "deiauk " file.txt 

Se você sabe que deve estar no início da linha, verifique:

grep "^deiauk " file.txt 

Comentários

  • Infelizmente, todas as respostas além desta estão incorretas.
  • @Shatu Obrigado! Portanto, vamos ' s ver quanto tempo leva para " atingir o topo " … Eu ' estou curioso porque gosto de adicionar respostas a perguntas antigas … Acho que se presume que sim, mas duvido. Seria muito bom para mim, mas realmente útil para os leitores. Para tornar este um bom caso de exemplo, eu poderia pedir que você escrevesse um comentário resumindo o que as outras respostas estão faltando?
  • (1) Parabéns por alcançar 10K repetições. Agora você tem o privilégio de verificar se esta resposta foi dada antes e foi excluída. (2) É sempre melhor responder à pergunta da forma mais ampla possível, com base no que é dito , e não dar uma resposta que funcione apenas para os dados de amostra. Parece, a partir dos dados de exemplo na pergunta, que as colunas são separadas por espaços – mas isso não é especificado. Todas as outras respostas também funcionarão para colunas separadas por tabulação. (3) Você evitou a falha fatal na resposta de tachomi (excluída) adicionando ^ – mas todas as outras respostas funcionam… (Cont.)
  • ( Continuação)… se a string aparecer em um campo diferente do primeiro. (4) Além disso, todas as outras respostas funcionam se deiauk for o último campo (ou seja, não há nada depois dele).

Resposta

Descobri que -x funcionou para mim.

Exemplo

$ grep -inx -d skip "favicon.ico" * test.txt:1:favicon.ico 

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

Comentários

  • Para 1: 1 correspondendo a toda a linha que contém hifens, -x a única opção. Por exemplo, grep -w "abc" <<<"abc-hac101-bb0" corresponderá, mas grep -x "abc" <<<"abc-hac101-bb0" não

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *