Nie mam jasności co do sposobu -s
, -t
oraz -c
możliwości pracy w tr polecenia. Kiedy robię
echo I am a good boy | tr good bad
Otrzymuję wynik:
I am a bddd bdy
Jest to całkiem zrozumiałe, ponieważ o
powtarza się w good
. Ostatnią możliwą zmianą w miejsce o
jest d
, a stąd wynik.
Teraz kiedy to zrobię
echo I am a good boy | tr -s good bad
wyjście jest
I am a bd bdy
-s
Opcja ma wycisnąć powtarzającego wystąpienie każdego znaku w zestawie 1 do jednego wystąpienia i następnie zmienić każdy znak w zestawie 1 do odpowiedniego znaku w zestawie 2, który jest w tej samej pozycji.
Tak powinno być
I am a bad bay.
Skąd ta zmiana?
Co więcej, kiedy to zrobię
echo I am a good boy | tr -c good bad
dostaję dddddddgoodddodd
Jak działa -c
opcja w tr
odniesieniu do tego przykładu?
I wreszcie: jak zmienić się z dobrego chłopca w złego chłopca .... :): P To znaczy,
echo I am a good boy | tr <something>
Daje mi wyjście jak: I am a bad boy
.
-s
przełącznik powodujetr
wyciskanie dowolnych znaków z ostatniego argumentu natr
(nie pierwszy, jak mówisz), które są powtarzane na wejściu. Jest to zauważono w artykule ty związane i wyjaśnione w ostatnim akapicie, w sekcji „Opis” na stronie man .Twoje zrozumienie
-s
jest nieprawidłowe, zastępuje powtarzające się występowanie znaków w zestawie 1 na wejściu pojedynczym znakiem. nie modyfikuje zestawu, np.daje
Do
-c
zastępuje opcja ustaw 1 z dopełnieniem (tj. Zbiór wszystkich znaków nie zawarte w zestawie 1). Możesz go użyć do usunięcia na przykład wszystkich znaków oprócz określonych.wyjścia
źródło
Pozostałe odpowiedzi pokryte
tr
„s-s
,-t
i-c
opcje, ale dla kompletności:Masz problem, ponieważ wybrałeś niewłaściwe narzędzie.
tr
służy do transformacji postacised
służy do edycji strumieniowej.Ponieważ oba
good
ibad
są ciągiem znaków w strumieniused
jest lepsze dopasowanie.echo I am a good boy | <something>
daje mi wynik jako:I am a bad boy
s/..../..../
Jest Zastępca. Cokolwiek pasuje do pierwszego wyrażenia regularnego, zostanie zastąpione drugim./g
Flagi na końcu jest do wymiany Globalnego ten sposób wszystkie wystąpienia zostaną zastąpione nie tylko pierwszy.źródło
tak. dokładnie!
tr -s
zastępuje wystąpienia powtarzających się znaków jednym znakiem.(przez stronę manuala).
wygląda to tak:
przekształca
good
się wbddd
. powtarzające się wystąpienia to 3 'd.więc zastępuje te trzy wystąpienia pojedynczym wystąpieniem.
to znaczy, że to bd. :)
źródło