Нужно к строке замены с * кроме первых и последних 3 символов

Я хочу настроить строку с * символы, кроме первых и последних 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 
1
задан 9 March 2020 в 12:52

2 ответа

Используя обработку строк к строке замены со звездочками.

$ a="abctextxyz"; \
  b="${a:3:$((${#a}-6))}"; \
  echo "${a:0:3}${b//?/*}${a:(-3)}"
0
ответ дан 17 March 2020 в 00:05

Этот сценарий использование 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
0
ответ дан 17 March 2020 в 00:05

Другие вопросы по тегам:

Похожие вопросы: