我想用同等数量的 替换文本文件中的任何 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
/e
flag 导致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())'