Я хочу настроить строку с * символы, кроме первых и последних 3 символов в строке, поскольку я не хочу печатать эту строку в журналах.
Например: если строка abctextxyz
, Я хочу измененный на abc****xyz
Я пытался распечатать строку с * кроме первых и последних 3 символов, но жесткого кодирования это к 7 строкам букв. Я хотел бы настроить его для произвольной длины.
Если строка имеет 6 характеров или меньше, это должно быть распечатано как есть.
Вот сценарий удара, который я создал с этой целью:
#!/bin/bash
STRING1="testabctest";
echo $STRING1;
STRING2=${STRING1:0:3};
echo $STRING2;
STRING3=${STRING1:(-3)};
echo $STRING3;
STRING4=$STRING2"****"$STRING3;
echo $STRING4
Используя обработку строк к строке замены со звездочками.
$ a="abctextxyz"; \
b="${a:3:$((${#a}-6))}"; \
echo "${a:0:3}${b//?/*}${a:(-3)}"
Этот сценарий использование 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