-s
Commutateur :Presser (supprimer les caractères répétés)
echo i am a good boy | tr -s good bad
sortie :
i am a bd bdy
Il y a deux choses qui se passent dans les coulisses qui font que cela se produise. Tout d'abord, si le deuxième argument de tr
est plus court que le premier puis le dernier caractère dans le 2ème argument est répété pour lui donner la même longueur que le premier. Donc la commande équivalente est :
echo i am a good boy | tr -s good badd
L'autre chose qui se passe est que lorsque les caractères du premier argument sont répétés, ils écrasent toute occurrence précédente (je fais référence aux deux oo
s en good
). Cela rend la commande désormais équivalente à :
echo i am a good boy | tr -s god bdd
(le second o
à d
remplacement écrase le précédent o
à a
remplacement, le rendant redondant)
Sans le -s
changer la sortie serait
i am a bddd bdy
Avec le -s
basculer tr
'comprime' tous les caractères répétés qui sont répertoriés dans le dernier argument laissant la sortie finale :
i am a bd bdy
-c
Commutateur :Complément
Le -c
switch est utilisé pour faire correspondre le complément du premier argument (c'est-à-dire tous les caractères non répertoriés dans arg 1). Par conséquent, arg 1 contiendra de nombreuses lettres (256-3). Maintenant, la même chose arrive à arg 2 comme dans le cas précédent :le dernier caractère de Arg 2 est répété pour correspondre à la longueur ou Arg 1. Donc, la déclaration d'origine :
echo i am a good boy | tr -c good bad
est équivalent à :
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(notez le g
manquant , o
et d
dans le premier ensemble, notez également que d
remplacera tous les autres caractères du deuxième jeu -- y compris le caractère espace)
C'est pourquoi i am a good boy
devient dddddddgoodddodd
Plus d'informations ici :http://www.linuxjournal.com/article/2563
Votre compréhension de -s
est incorrect, il remplace les occurrences répétées des caractères du jeu 1 dans l'entrée par un seul caractère. il ne modifie pas l'ensemble, par exemple.
echo i am a good boy | tr -s god bad
donne
i am a bad bay
Le -c
L'option remplace le jeu 1 par son complément (c'est-à-dire le jeu de tous les caractères non contenus dans le jeu 1). Vous pouvez l'utiliser pour supprimer tous les caractères sauf les caractères spécifiés par exemple.
echo i am a good boy | tr -cd gobdy
sorties
goodboy