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.
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.
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.
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())'
Tags regular-expression