3개 이상의 숫자를 동일한 수의 *로 바꿉니다.

3개 이상의 숫자를 동일한 수의 *로 바꿉니다.

텍스트 파일에서 3자리 이상의 문자열을 동일한 숫자로 바꾸고 싶습니다 *. 예: abc-1234-45 --> abc-****-45

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

이것을 시도했지만 *로 대체되었습니다.

답변1

당신은 그것을 사용할 수 있습니다 perl:

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

/e플래그는 perl대체 전에 오른쪽이 표현식으로 평가되도록 합니다.

답변2

GNU awk

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

아니면 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())'

관련 정보