Comment supprimer tous les n caractères d'une chaîne particulière à l'aide de scripts Shell,
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
La sortie sera au format suivant
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
Pour répondre au titre de votre question avec spécifie couper le n dernier caractère d'une chaîne, vous pouvez utiliser la fonctionnalité d'extraction de sous-chaîne de Bash.
me@home$ A="123456"
me@home$ echo ${A:0:-2} # remove last 2 chars
1234
Cependant, sur la base de vos exemples, vous semblez vouloir supprimer toutes les virgules de fin, auquel cas vous pouvez utiliser sed 's/,*$//'
.
me@home$ echo "ssl01:49188,ssl999999:49188,,,,," | sed 's/,*$//'
ssl01:49188,ssl999999:49188
ou, pour une solution purement Bash, vous pouvez utiliser la suppression de sous-chaîne:
me@home$ X="ssl01:49188,ssl999999:49188,,,,,"
me@home$ shopt -s extglob
me@home$ echo ${X%%+(,)}
ssl01:49188,ssl999999:49188
J'utiliserais l'approche sed
si la transformation doit être appliquée à un fichier entier, et l'approche de suppression de sous-chaîne bash si la chaîne cible se trouve déjà dans une variable bash.
Avec sed
:
sed 's/,\+$//' file
Je suppose que vous devez supprimer ces ,
inutiles
sed 's/,,//g;s/\,$//g' your_file
testé:
> cat temp
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
> sed 's/,,//g;s/\,$//g' temp
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
>
Utilisation de sed:
sed 's/,,*$//g' file