Usando o comando grep e backreferencing

2

Esta é uma pergunta básica, mas não consigo entender. Estou aprendendo Linux e uma das perguntas que me deram é:

*The word sentimentalment includes the same three characters (e.g. "ent") which appear three times. The word "blayblapblam" also contains the same three characters repeated three time (e.g. "bla").

How many words can you find which contain any three characters repeated three times, like the examples "sentimentalment" and "blayblapblam", but which also begin with lower case "d". Use /usr/share/dict/words as your list of possible words and grep to find the answer. The "d" is not one of the characters considered when detecting the three-character strings.*

Até agora, posso retornar instâncias em que as mesmas três letras aparecem duas vezes;

grep -E '^d(...).*' /usr/share/dict/words > output

O que para mim lê, procure uma palavra que comece com 'd', depois uma combinação de três letras, 0 ou mais caracteres antes que o mesmo grupo (1) apareça novamente.

Eu tentei o seguinte:

grep -E '^d(...).*.*' /usr/share/dict/words > output

Se o meu entendimento estiver correto (o que obviamente não é), retorna o grupo um, depois zero ou mais caracteres, então agrupe um novamente.

Alguém pode apontar onde estou indo errado? Qualquer ajuda é apreciada.

    
por Sirus 01.11.2012 / 14:57

1 resposta

9

Parece que você corrigiu as três letras para depois do d . Talvez você precise de algo assim:

grep -E '^d.*(...).*' /usr/share/dict/words > output

que faria sua pesquisa de 3 padrões em

grep -E '^d.*(...).*.*' /usr/share/dict/words > output

Por razões de portabilidade, deve-se evitar combinar expressões regulares estendidas com referências anteriores, para melhor uso

grep '^d.*\(...\).*.*' /usr/share/dict/words > output

    
por 01.11.2012 / 15:17