예를 들어 다음과 같은 숫자가 있습니다.
123456789
4-8을 별표로 바꾸고 싶습니다.
123****89
답변1
답변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
다음 세 가지 방법이 작동합니다.
echo "123456789" | sed "s/\(...\)\(....\)/\1\****/g"
echo "123456789" | sed "s/\(...\)\([0-9]\{5\}\)/\1\****/g"
echo "123456789" | sed "s/[^12389]/*/g"
산출
123****89