-s
Cambiar:apretar (eliminar caracteres repetidos)
echo i am a good boy | tr -s good bad
salida:
i am a bd bdy
Hay dos cosas que suceden detrás de escena que hacen que esto suceda. En primer lugar, si el segundo argumento de tr
es más corto que el primero y luego el último carácter en el segundo argumento se repite para que tenga la misma longitud que el primero. Entonces el comando equivalente es:
echo i am a good boy | tr -s good badd
La otra cosa que sucede es que cuando se repiten los caracteres en el primer argumento, sobrescriben cualquier ocurrencia anterior (me refiero a los dos oo
s en good
). Esto hace que el comando ahora sea equivalente a:
echo i am a good boy | tr -s god bdd
(el segundo o
a d
el reemplazo sobrescribe el anterior o
a a
reemplazo, haciéndolo redundante)
Sin el -s
cambiar la salida sería
i am a bddd bdy
Con el -s
interruptor tr
'aprieta' los caracteres repetidos que se enumeran en el último argumento dejando el resultado final:
i am a bd bdy
-c
Cambiar:Complemento
El -c
switch se usa para hacer coincidir el complemento del primer argumento (es decir, todos los caracteres que no aparecen en arg 1). Como resultado, arg 1 contendrá muchas letras (256-3). Ahora, sucede lo mismo con arg 2 que en el caso anterior:el carácter final de Arg 2 se repite para que coincida con la longitud de Arg 1. Entonces, la declaración original:
echo i am a good boy | tr -c good bad
es equivalente a:
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(tenga en cuenta el g
que falta , o
y d
en el primer conjunto, también tenga en cuenta que d
reemplazará todos los demás caracteres en el segundo conjunto, incluido el carácter de espacio)
Por eso i am a good boy
se convierte en dddddddgoodddodd
Más información aquí:http://www.linuxjournal.com/article/2563
Su comprensión de -s
es incorrecto, reemplaza las apariciones repetidas de caracteres en el conjunto 1 en la entrada con un solo carácter. no modifica el conjunto, por ejemplo.
echo i am a good boy | tr -s god bad
da
i am a bad bay
El -c
opción reemplaza el conjunto 1 con su complemento (es decir, el conjunto de todos los caracteres no contenidos en el conjunto 1). Puede usar esto para eliminar todos los caracteres excepto los especificados, por ejemplo.
echo i am a good boy | tr -cd gobdy
salidas
goodboy