我有以下号码作为示例:
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-
或者第四到第七个字符,无论它们是什么?
$ var=abcdäöäö
$ echo "${var:0:3}****${var:7}"
abc****ö
${var:n:m}
请注意,子字符串扩展或替换都不${var:pattern:repl}
是 POSIX 功能,但大多数 shell 都支持它们。
答案4
这 3 种方法有效:
echo "123456789" | sed "s/\(...\)\(....\)/\1\****/g"
echo "123456789" | sed "s/\(...\)\([0-9]\{5\}\)/\1\****/g"
echo "123456789" | sed "s/[^12389]/*/g"
输出
123****89