Bash에서 숫자를 별표로 바꾸십시오.

Bash에서 숫자를 별표로 바꾸십시오.

예를 들어 다음과 같은 숫자가 있습니다.

123456789

4-8을 별표로 바꾸고 싶습니다.

123****89

답변1

문자열을 정확하게 바꾸려면 다음을 4567사용하십시오.

echo '123456789' | sed 's/4567/****/'
echo '123456789' | awk 'gsub("4567","****",$0)'

4-7범위에 나타나는 숫자를 바꾸려면 다음을 사용하십시오.

echo '123456789' | sed 's/[4567]/*/g'
echo '123456789' | awk 'gsub(/[4567]/,"*",$0)'

답변2

위치 4에서 8까지의 문자 범위를 바꿉니다(제외).

sed -E 's/(...).{4}/\1****/' <<<"123456789" 
123****89

  • (...)- 첫 번째 대괄호 그룹에 캡처된 처음 3개 문자
  • .{4}- 교체할 다음 4자

답변3

우리는 Bash에 대해 이야기하고 있으므로 사용 가능한 다른 연산자를 사용하고 싶을 수도 있습니다.매개변수 확장:

4567문자열을 로 바꾸시겠습니까 ****?

$ var=abcdefghi123456789
$ echo "${var/4567/****}"
abcdefghi123****89

4아니면 별표가 있는 숫자인가요 7?

$ var=-3-4-5-6-7-8-
$ echo "${var//[4-7]/*}"
-3-*-*-*-*-8-

아니면 4부터 7까지의 문자가 무엇이든 상관없나요?

$ var=abcdäöäö
$ echo "${var:0:3}****${var:7}"
abc****ö

${var:n:m}${var:pattern:repl}부분 문자열 확장이나 대체는 POSIX 기능이 아니지만 대부분의 쉘은 이를 지원합니다.

답변4

다음 세 가지 방법이 작동합니다.

  1. echo "123456789" | sed "s/\(...\)\(....\)/\1\****/g"
    
  2. echo "123456789" | sed "s/\(...\)\([0-9]\{5\}\)/\1\****/g"
    
  3. echo "123456789" | sed "s/[^12389]/*/g"
    

산출

123****89

관련 정보