Você precisa de quantificadores numéricos para isso:
sed -r 's/\b([0-9]{3})([0-9]{3})([0-9]{4})\b/--/' your_file
A opção -r
, que permite expressões regulares estendidas, não é POSIX, portanto, uma solução mais portátil seria
perl -pe 's/\b([0-9]{3})([0-9]{3})([0-9]{4})\b/$1-$2-$3/' your_file
Em expressões regulares estendidas, o quantificador {n,m}
significa corresponder ao átomo anterior pelo menos n
times e no máximo m
times. Por exemplo, o quantificador ?
pode ser expresso como {0,1}
. Omitir m
significa que não há limite superior: +
pode ser gravado como {1,}
. Por fim, {n}
significa que o átomo anterior corresponde exatamente a n
times.
Se você quiser usar sed
, você não precisa exatamente ter expressões regulares estendidas para isso; é só que o formulário básico de expressões regulares seria menos legível:
sed 's/\b\([0-9]\{3\}\)\([0-9]\{3\}\)\([0-9]\{4\}\)\b/--/' your_file