我想自定义一个带有 * 字符的字符串,除了字符串中的前 3 个和后 3 个字符,因为我不想在日志中打印这个字符串。
例如:如果字符串是abctextxyz
,我希望将其更改为abc****xyz
我尝试打印除前 3 个字符和后 3 个字符外带有 * 的字符串,但将其硬编码为 7 个字母的字符串。我想将其自定义为任意长度。
如果字符串不超过 6 个字符,则应按原样打印。
这是我为此目的创建的 bash 脚本:
#!/bin/bash
STRING1="testabctest";
echo $STRING1;
STRING2=${STRING1:0:3};
echo $STRING2;
STRING3=${STRING1:(-3)};
echo $STRING3;
STRING4=$STRING2"****"$STRING3;
echo $STRING4
答案1
使用字符串操作将字符串替换为星号。
$ a="abctextxyz"; \
b="${a:3:$((${#a}-6))}"; \
echo "${a:0:3}${b//?/*}${a:(-3)}"
答案2
此脚本用于sed
用星号替换字符。它还用于bc
计算应使用的星号数量并seq
定义printf
命令中的范围。
#!/bin/bash
STRING="fgdsfssa"
echo "$STRING"
STRING_LENGTH=${#STRING}
if [[ "$STRING_LENGTH" -lt 7 ]]; then
echo "$STRING"
else
ASTERISKS_LENGTH=$(echo $STRING_LENGTH - 6 | bc)
ASTERISKS=$(printf "*%.0s" $(seq $ASTERISKS_LENGTH))
FINAL_STRING="$(echo "$STRING" | sed -r "s/(.{3})(.*)(.{3})/\1$ASTERISKS\3/")"
echo "$FINAL_STRING"
fi