Como posso corresponder uma string que tenha repetidos caracteres repetidos um certo número em um intervalo?

3

Eu preciso substituir todas as strings de 2 a 5 caracteres repetidos

Existe uma expressão mais compacta que esta

$ echo a aa aaa aaaa aaaaa aaaaaa| sed 's/a\{2\}/word/;s/a\{3\}/word/;s/a\{4\}/word/;s/a\{5\}/word/;' 
a word word word word aaaaaa

Por exemplo, dando ao intervalo o suporte curvo (não funciona) \{2|3|4|5\}

    
por user123456 04.10.2016 / 12:01

1 resposta

4

Faça:

sed -E 's/\b([[:alpha:]]){1,4}\b/word/g'
  • \b corresponde ao limite de palavras

  • ([[:alpha:]]) corresponde a qualquer caractere alfabético na localidade atual e coloca isso como grupo capturado 1

  • {1,4} corresponde ao grupo capturado 1 a 4 vezes, ou seja, no total, o caractere está sendo correspondido de 2 a 5 vezes

  • se for correspondida, a palavra será substituída pela string word

  • o modificador g de substituição ( s ) substitui todas as ocorrências de palavras

Para corresponder a qualquer caractere, não apenas alfabético, substitua [[:alpha:]] por . :

sed -E 's/\b(.){1,4}\b/word/g'

Exemplo:

$ echo 'a aa aaa aaaa aaaaa aaaaaa' | sed -E 's/\b([[:alpha:]]){1,4}\b/word/g'
a word word word word aaaaaa
    
por heemayl 04.10.2016 / 12:08