在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-

或者第四到第七个字符,无论它们是什么?

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

${var:n:m}请注意,子字符串扩展或替换都不${var:pattern:repl}是 POSIX 功能,但大多数 shell 都支持它们。

答案4

这 3 种方法有效:

  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

相关内容