Substituindo 3 ou mais dígitos por um número equivalente de *

3

Eu quero substituir qualquer sequência de 3 ou mais dígitos em um arquivo de texto com o número equivalente de * . Por exemplo: abc-1234-45 - > abc - **** - 45

echo "abc-1234-45" | sed 's/[0-9]\{3,\}/*/'

Eu tentei isso, mas ele só o substitui por um *.

Por favor, sugira uma solução aqui.

    
por Raghavender Kavi 08.04.2014 / 19:35

2 respostas

3

Você pode usar perl :

$ echo "abc-1234-45" | perl -pe 's/(\d{3,})/"*" x length($1)/eg'
abc-****-45

/e flag faz com que perl avalie o lado direito como uma expressão antes de substituir.

    
por 08.04.2014 / 19:46
0

GNU awk

echo 'abc-1234-45' | 
awk --re-interval -v RS='[[:digit:]]{3,}' '{gsub(/[[:digit:]]/, "*", RT);
  printf "%s%s", $0, RT}'
abc-****-45

Ou se você estiver disposto a olhar para o Python

echo 'abc-1234-45' |  python -c 'import re; import sys; print re.sub(r"\d{3,}",\
lambda x: len(x.group())*"*", sys.stdin.readline().strip())'
    
por 09.04.2014 / 14:15