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.