Estoy confundido con respecto a la forma -s
, -t
y -c
opciones de trabajo en el tr comando. Cuando lo hago
echo I am a good boy | tr good bad
Me sale la salida:
I am a bddd bdy
Esto es bastante comprensible, ya que o
se repite en good
. El último cambio posible en lugar de o
es d
, y por lo tanto, la salida.
Ahora cuando lo hago
echo I am a good boy | tr -s good bad
la salida es
I am a bd bdy
Se -s
supone que la opción exprime cada ocurrencia repetida de cada carácter en el conjunto 1 en una sola ocurrencia y luego cambia cada carácter en el conjunto 1 en el carácter correspondiente en el conjunto 2 que está en la misma posición.
Entonces debería haber sido
I am a bad bay.
¿Por qué el cambio?
Además, cuando lo hago
echo I am a good boy | tr -c good bad
yo obtengo dddddddgoodddodd
¿Cómo funciona la -c
opción tr
, refiriéndose a este ejemplo?
Y finalmente: cómo cambiarme de un buen chico a un chico malo .... :): P Eso es,
echo I am a good boy | tr <something>
me da la salida como: I am a bad boy
.
-s
cambio hacetr
que exprima cualquier carácter del último argumento atr
(no el primero, como usted dice) que se repite en la entrada. Esto se observa en el artículo que vinculó y se explica en el último párrafo en la sección "Descripción" de la página del manual .Su comprensión de
-s
es incorrecta, reemplaza las apariciones repetidas de caracteres en el conjunto 1 en la entrada con un solo carácter. no modifica el conjunto, p. ej.da
La
-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.salidas
fuente
Las otras respuestas cubiertos
tr
's-s
,-t
y-c
opciones, pero está completo:Tiene problemas porque eligió la herramienta incorrecta.
tr
es para transformaciones de personajessed
es para la edición de transmisiones.Dado que ambos
good
ybad
son secuencia de caracteres en la secuenciased
es una mejor coincidencia.echo I am a good boy | <something>
me da la salida como:I am a bad boy
El
s/..../..../
es sustituto. Lo que coincida con la primera expresión regular se reemplazará con la segunda. La/g
bandera al final es para reemplazo global de esta manera, todas las ocurrencias serán reemplazadas, no solo la primera.fuente
si. ¡exactamente!
tr -s
reemplaza instancias de caracteres repetidos con un solo carácter.(a través de la página de manual)
entonces, va así:
se convierte
good
abddd
. Las instancias repetidas son 3 'd's.entonces reemplaza estas tres instancias con una sola instancia.
eso es lo hace bd. :)
fuente