Primeiro eu começaria testando com echo
e canalizando isso para sed
, do que usando um arquivo real. Em segundo lugar, você pode usar um {n}
no modelo regex estendido para denotar múltiplos e limites.
Você estava muito bem lá, mas seu regex esperava um espaço de liderança.
$ echo 'cheese . . . muffins' | sed -r 's/(\s?\.){3}/ dot dot dot/g'
cheese dot dot dot muffins
Observe que o \s?
ainda é ganancioso o suficiente para estragar a saída, então adicionei um espaço à saída. Você pode não querer isso. Eu também tornei o espaço opcional, então ele corresponderá a todos os itens a seguir:
...
. ..
.. .
. . .
. . .
Basta remover o sinalizador ?
opcional.
Dado seu problema com unicode (nos comentários), você pode forçar os dados para sua equivalência ASCII com iconv
e, em seguida, sed-lo:
$ iconv -f utf-8 -t ascii//translit sed-dots | sed -r 's/(\s?\.){3}/ dot dot dot/g'
Lorem ipsum dot dot dot
Some dot dot dot more text