-s
Switch:Squeeze (rimuovi i caratteri ripetuti)
echo i am a good boy | tr -s good bad
output:
i am a bd bdy
Ci sono due cose che accadono dietro le quinte che lo fanno accadere. In primo luogo, se il secondo argomento di tr
è più breve del primo e dell'ultimo carattere nel 2° argomento si ripete per renderlo della stessa lunghezza del primo. Quindi il comando equivalente è:
echo i am a good boy | tr -s good badd
L'altra cosa che accade è che quando i caratteri nel primo argomento vengono ripetuti sovrascrivono qualsiasi occorrenza precedente (mi riferisco ai due oo
s in good
). Questo rende il comando ora equivalente a:
echo i am a good boy | tr -s god bdd
(il secondo o
a d
la sostituzione sovrascrive il precedente o
a a
sostituzione, rendendolo ridondante)
Senza il -s
switch l'output sarebbe
i am a bddd bdy
Con il -s
cambia tr
"comprime" tutti i caratteri ripetuti elencati nell'ultimo argomento lasciando l'output finale:
i am a bd bdy
-c
Cambio:Complemento
Il -c
switch viene utilizzato per abbinare il complemento del primo argomento (ovvero tutti i caratteri non elencati in arg 1). Di conseguenza, arg 1 conterrà molte lettere (256-3). Ora, la stessa cosa accade ad arg 2 come nel caso precedente:il carattere finale di Arg 2 viene ripetuto per corrispondere alla lunghezza o ad Arg 1. Quindi l'istruzione originale:
echo i am a good boy | tr -c good bad
è equivalente a:
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(notare il g
mancante , o
e d
nel primo insieme, nota anche che d
sostituirà ogni altro carattere nel secondo set -- incluso il carattere spazio)
Ecco perché i am a good boy
diventa dddddddgoodddodd
Maggiori informazioni qui:http://www.linuxjournal.com/article/2563
La tua comprensione di -s
non è corretto, sostituisce le occorrenze ripetute di caratteri nel set 1 nell'input con un singolo carattere. non modifica l'insieme, es.
echo i am a good boy | tr -s god bad
dà
i am a bad bay
Il -c
option sostituisce l'insieme 1 con il suo complemento (cioè l'insieme di tutti i caratteri non contenuti nell'insieme 1). Puoi usarlo per rimuovere tutto tranne i caratteri specificati, ad esempio.
echo i am a good boy | tr -cd gobdy
uscite
goodboy