1 votes

Besoin de remplacer une chaîne de caractères par *, à l'exception des 3 premiers et derniers caractères.

Je veux personnaliser une chaîne avec des caractères *, sauf les 3 premiers et derniers caractères de la chaîne, car je ne veux pas imprimer cette chaîne dans les journaux.

Par exemple, si la chaîne de caractères est abctextxyz Je veux que ce soit changé en abc****xyz

J'ai essayé d'imprimer la chaîne avec * sauf les 3 premiers et derniers caractères, mais en codant en dur une chaîne de 7 lettres. Je voudrais la personnaliser pour une longueur arbitraire.

Si la chaîne est de 6 caractères ou moins, elle doit être imprimée telle quelle.

Voici un bash script que j'ai créé à cet effet :

#!/bin/bash
STRING1="testabctest";
echo $STRING1;
STRING2=${STRING1:0:3};
echo $STRING2;
STRING3=${STRING1:(-3)};
echo $STRING3;
STRING4=$STRING2"****"$STRING3;
echo $STRING4

0voto

BeastOfCaerbannog Points 8327

Ce script utilise sed pour remplacer les caractères par des astérisques. Il utilise également bc pour calculer le nombre d'astérisques qui doivent être utilisés et seq pour définir la plage dans le printf commandement.

#!/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

0voto

bac0n Points 4841

Utilisation de la manipulation des chaînes pour remplacer les chaînes par des astérisques.

$ a="abctextxyz"; \
  b="${a:3:$((${#a}-6))}"; \
  echo "${a:0:3}${b//?/*}${a:(-3)}"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X