用同等数量的 * 替换 3 个或更多数字

用同等数量的 * 替换 3 个或更多数字

我想用同等数量的 替换文本文件中的任何 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

/eflag 导致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())'

相关内容