Grep: Filtrando a Questão

0

Eu preciso construir uma expressão regular que filtre um grupo de palavras que comece e termine com a mesma palavra. Por exemplo, the life of the free produzirá the life of the e he was and he his the same produzirá he was and he . As duas palavras devem ter no máximo 10 caracteres uma da outra.

    
por Sebastian 05.03.2015 / 17:22

2 respostas

1

Teste grep com expressão regular estendida:

$ echo "the life of the free" | grep -Eo "(\b[[:alnum:]]+\b)([[:blank:]]|[[:alnum:]]){1,10}"
the life of the

$ echo "he was and he his the same" | grep -Eo "(\b[[:alnum:]]+\b)([[:blank:]]|[[:alnum:]]){1,10}"
he was and he

Aqui -E significa regexp estendido, -o significa apenas imprimir a parte correspondente da linha, \b corresponde ao limite da palavra, a classe de caractere [[:alnum:]] significa todos os caracteres alfabéticos (maiúsculas e minúsculas) e numéricos , [[:blank:]] significa espaço ou tabulação, + significa uma ou mais ocorrências da correspondência anterior, {1,10} a correspondência anterior pode ocorrer entre 1 e no máximo 10 vezes, significa corresponder ao primeiro grupo correspondente (expresso entre o primeiro par de parênteses), isto é, \b[[:alnum:]]+\b .

    
por heemayl 05.03.2015 / 17:43
2

Com o PCRE, pode-se fazer:

grep -Po '\b(\w+)\b.{1,10}\b\b'
  • -P ativa expressões regulares no estilo Perl usando o PCRE.
  • -o imprime apenas o texto correspondente.
  • \b marca o limite da palavra
  • (\w+) agrupa uma correspondência de caracteres de palavras
  • .{1,10} corresponde a até 10 caracteres e pelo menos 1.
  • refere-se ao grupo correspondido anteriormente.
por muru 05.03.2015 / 17:39