텍스트 파일에서 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())'