como eu uso o egrep para pesquisar strings

0

Eu quero procurar por uma string que tenha [RT] "qualquer coisa" D que significa primeiro caractere pode ser R ou T e o próximo pode ser qualquer coisa até que D seja exibido o que devo usar é "egrep"?

    
por Thanis Prucksikanont 05.01.2018 / 16:14

2 respostas

6

Se você tem o GNU grep com suporte a Expressão Regular compatível com Perl (PCRE) (habilitado com -P ), então você pode fazer da seguinte maneira:

grep -o -P 'RT.*?D' file

Queremos o PCRE porque ele tem o quantificador lento ( ? ) que podemos usar com .* em vez de .* sozinho. Este último é ganancioso e vai sugar tudo até o último D ...

$ grep -o 'RT.*D' <<< "JKIRTTHIUCDELKJUCDE"
RTTHIUCDELKJUCD
$ grep -o -P 'RT.*?D' <<< "JKIABTHIUCDELKJUCDE"
RTTHIUCD

Ah, e o sinal -o informa grep para imprimir apenas a parte correspondente de uma linha, em vez do comportamento padrão de imprimir a linha inteira.

Observação: isso foi mesclado de uma pergunta similar, agora fechada, como duplicada, que tinha uma diferença importante: a última parte do padrão era multi-caractere, em oposição ao único D aqui. O caso de um único caractere pode ser tratado sem o PCRE (veja a outra resposta aqui), mas o caso de vários caracteres requer uma funcionalidade não disponível com a sintaxe BRE ou ERE.

    
por 06.01.2018 / 13:40
4

Como o comentário dizia. grep é suficiente para fazer o trabalho. Escreva seu padrão como [RT].*D .

Para obter a primeira aparição de D , use [RT][^D]*D .

Havia um cursor no padrão que adicionei por causa do "primeiro caractere" da pergunta. Tendo percebido que a frase pode significar algo diferente, agora removi os caracteres.

    
por 05.01.2018 / 16:22