使用SED/AWK实现单词前五位保留其余字符替换为*的脱敏处理
刚好我之前处理过类似的需求,给你整理了SED和AWK两种实现方案,都能完美满足你的单词脱敏要求👇
用SED实现单词脱敏
- 执行命令:
sed -E ':loop; s/^(.{5})(.)/\1*/; t loop' your_file.txt
- 细节解释:
:loop定义一个循环标签,用来重复执行替换操作s/^(.{5})(.)/\1*/匹配前5个字符后的任意单个字符,把这个字符替换成*t loop如果上一步的替换成功了,就跳回loop标签继续循环,直到前5个字符后面的所有字符都被替换成*- 对于长度≤5的单词,因为找不到前5个字符后的匹配项,会直接输出原单词,不会做修改
用AWK实现单词脱敏
方法一(直观易懂)
awk '{ len = length($0) if (len <= 5) { print $0 } else { prefix = substr($0, 1, 5) stars = sprintf("%" (len - 5) "s", "") gsub(/ /, "*", stars) print prefix stars } }' your_file.txt
- 细节解释:
- 先获取当前单词的长度
len - 如果单词长度≤5,直接打印原内容
- 如果长度超过5,先截取前5个字符作为前缀,再生成对应数量的
*字符串,最后拼接两者输出
- 先获取当前单词的长度
方法二(简洁紧凑版)
awk '{n=length($0); print substr($0,1,5) substr("************************",1,n>5?n-5:0)}' your_file.txt
- 细节解释:
- 提前准备一个足够长的
*字符串,根据单词长度动态截取需要的*数量,和前5个字符拼接后直接输出,代码更精简
- 提前准备一个足够长的
内容的提问来源于stack exchange,提问作者Vijayraj S
相关产品推荐
相关产品推荐

