tr(1) tr(1)
NAZWA
tr - przetłumacz lub usuń znaki
SKŁADNIA
tr [-cst] [--complement] [--squeeze-repeats] [--trun
cate-set1] łańcuch1 łańcuch2
tr {-s,--squeeze-repeats} [-c] [--complement] łańcuch1
tr {-d,--delete} [-c] łańcuch1
tr {-d,--delete} {-s,--squeeze-repeats} [-c] [--comple
ment] łańcuch1 łańcuch2
GNU tr akceptuje także opcje --help i --version.
OPIS
Dokumentacja niniejsza nie jest już utrzymywana i może być
niedokładna lub niekompletna. Autorytatywnym źródłem jest
obecnie dokumentacja Texinfo.
Ta strona podręcznika opisuje wersję GNU programu tr. tr
kopiuje standardowe wejście na standardowe wyjście,
dokonując jednej z poniższych operacji:
ˇ przełóż, opcjonalnie ściśnij powtórzone znaki w
wyniku
ˇ ściśnij powtórzone znaki
ˇ usuń znaki
ˇ usuń znaki, potem ściśnij powtórzone znaki w
wyniku
Argumenty łańcuch1 i (jeśli podany) łańcuch2 definiują
uporządkowane zbiory znaków, poniżej nazwane zb1 i zb2.
Owe zbiory to znaki z wejścia na których operuje tr.
Opcja --complement (-c) zastępuje zb1 jego dopełnieniem
(wszystkimi znakami których nie ma w zb1).
PODAWANIE ZBIORÓW ZNAKÓW
Format argumentów łańcuch1 i łańcuch2 przypomina format
wyrażeń regularnych; jednakowoż, nie są to wyrażenia regu
larne, lecz tylko listy znaków. Większość znaków w tych
łańcuchach reprezentuje po prostu same siebie, ale
łańcuchy mogą też zawierać wyliczone poniżej skróty, dla
wygody. Niektórych z nich można użyć tylko w łańcuch1 lub
łańcuch2, jak zaznaczono poniżej.
Backslash po którym nie następuje znak spośród
wymienionych poniżej powoduje komunikat o błędzie.
\a Control-G.
\b Control-H.
\f Control-L.
\n Control-J.
FSF Narzędzia Tekstowe GNU 1
tr(1) tr(1)
\r Control-M.
\t Control-I.
\v Control-K.
\ooo Znak o wartości podanej przez ooo, czyli od 1 do 3
cyfr ósemkowych.
\\ Backslash.
Zakresy: notacja `m-n' rozszerzana jest na wszystkie znaki
od m do n, w porządku rosnącym. m powinno występować w
porządku sortowania przed n; jeśli tak nie jest, następuje
błąd. Dla przykładu, `0-9' jest tym samym co
`0123456789'. Chociaż GNU tr nie obsługuje składni System
V używającej nawiasów kwadratowych do zamykania zakresów,
tłumaczenia określone w tym formacie nadal będą działać, o
ile nawiasy w łańcuch1 odpowiadają identycznym nawiasom w
łańcuch2.
Powtórzone znaki: notacja `[c*n]' w łańcuch2 rozszerzana
jest na n kopii znaku c. Tak więc `[y*6]' jest tym samym
co `yyyyyy'. Notacja `[c*]' w łańcuch2 rozszerzana jest
na tyle kopii c ile potrzeba na to aby zb2 był tak długi
jak zb1. jeśli n zaczyna się od 0, jest reprezentowane
ósemkowo, w przeciwnym razie dziesiętnie.
Klasy znaków: notacja `[:nazwa-klasy:]' rozszerzana jest
na wszystkie znaki z (predefiniowanej) klasy zwanej nazwa-
klasy. Znaki nie są rozszerzane w jakimś szczególnym
porządku, z wyjątkiem klas 'upper' i Gdy podano zarówno
opcję --delete (-d) jak i --squeeze-repeats (-s) w
łańcuch2 można użyć każdej klasy znaków. W przeciwnym
razie w łańcuch2 akceptowane są tylko klasy znaków 'upper'
i 'lower', i to tylko wtedy kiedy odpowiednie klasy
'upper' i 'lower' zostały określone w relatywnie tej samej
pozycji w łańcuch1. Takie postępowanie określa konwersję
wielkości liter. Nazwy klas podano niżej; jeśli podano
nieprawidłową nazwę klasy, powstaje błąd.
alnum Litery i cyfry.
alpha Litery.
blank Pozioma biała spacja.
cntrl Znaki kontrolne.
digit Cyfry.
graph Znaki drukowalne, z wyłączeniem spacji.
lower Małe litery.
FSF Narzędzia Tekstowe GNU 2
tr(1) tr(1)
print Znaki drukowalne, łącznie ze spacją.
punct Znaki interpunkcyjne.
space Pionowa lub pozioma biała spacja.
upper Duże litery.
xdigit Cyfry szesnastkowe.
Klasy równoważne: składnia `[=c=]' rozszerzana jest na
wszystkie znaki równoważne c, bez szczególnej kolejności.
Klasy równoważne to niedawny wynalazek pomyślany dla
obsługi alfabetów nie-angielskich. Jednak nie istnieje,
zdaje się, standardowa metoda ich zdefiniowania lub
określenia ich zawartości. Z tego powodu nie są one w
pełni zaimplementowane w GNU tr; klasa równoważna każdego
znaku składa się tylko z tego znaku, co obecnie czyni je
konstrukcją bezużyteczną.
TŁUMACZENIE
tr dokonuje tłumaczenia gdy podane są zarówno łańcuch1 jak
i łańcuch2, i gdy nie podano opcji --delete (-d). tr
tłumaczy każdy znak swojego wejścia znajdujący się w zb1
na odpowiedni znak w zb2. Znaki których nie ma w zb1
przepuszczane są w postaci niezmienionej. Gdy jakiś znak
pojawia się więcej niż jeden raz w zb1, a odpowiadające mu
znaki w zb2 nie są takie same, używany jest tylko ostatni
z nich. Dla przykładu, poniższe dwie komendy są
równoważne:
tr aaa xyz
tr a z
Typowym użyciem tr jest konwersja małych liter na duże.
Można to zrobić na wiele sposobów. Oto trzy z nich:
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'
Gdy tr dokonuje tłumaczenia, zb1 i zb2 powinny normalnie
być tej samej długości. Jeśli zb1 jest krótszy od zb2,
dodatkowe znaki na końcu zb2 są ignorowane.
Z drugiej strony, podanie zb1 dłuższego od zb2 nie jest
przewidziane: POSIX.2 mówi że rezultat jest niezdefin
iowany. W takiej sytuacji tr BSD wydłuża zb2 do długości
zb1 powtarzając ostatni znak zb2 tyle razy ile potrzeba.
tr z System V obcina zb1 do długości zb2.
Domyślnie, GNU tr załatwia ten przypadek tak jak robi to
tr z BSD. Gdy podano opcję --truncate-set1 (-t) GNU tr
załatwia ten przypadek tak jak System V tr. Opcja ta jest
ignorowana dla operacji innych niż tłumaczenie.
FSF Narzędzia Tekstowe GNU 3
tr(1) tr(1)
Zachowywanie się jak tr z System V w tym przypadku psuje
względnie częsty idiom z BSD:
tr -cs A-Za-z0-9 '\012'
ponieważ konwertuje tylko bajty zerowe (pierwszy element
dopełnienia zb1), a nie wszystkie znaki nie-alfanu
meryczne, na znaki nowej linii.
ŚCISKANIE POWTÓRZEŃ I KASOWANIE
Jeśli podano tylko opcję --delete (-d), tr usuwa z wejścia
wszystkie znaki znajdujące się w zb1.
Jeśli podano tylko opcję --squeeze-repeats (-s), tr
zastępuje w wejściu każdą sekwencję powtórzonych znaków
znajdujących się w zb1 pojedynczym wystąpieniem tegoż
znaku.
Jeśli podano zarówno opcje --delete jak i
--squeeze-repeats, tr najpierw wykonuje wszelkie usunięcia
używając zb1, potem ściska powtórzenia pozostałych znaków
używając zb2.
Opcji --squeeze-repeats można także używać podczas
tłumaczenia, w którym to przypadku tr najpierw dokonuje
tłumaczenia, potem ściska powtórzenia pozostałych znaków
używając zb2.
Oto kilka przykładów ilustrujących różne kombinacje opcji:
Usuń wszystkie bajty zerowe:
tr -d '\000'
Ustawia wszystkie słowa w osobnych liniach. Konwertuje to
wszystkie znaki nie-alfanumeryczne na znaki nowej linii,
potem ściska każdy łańcuch powtórzonych nowych linii w
pojedynczą nową linię:
tr -cs '[a-zA-Z0-9]' '[\n*]'
Konwertuje każdą sekwencję powtórzonych nowych linii w
pojedynczą nową linię:
tr -s '\n'
GNU tr akceptuje także następujące opcje, w kombinacji z
innymi:
--help Wypisz komunikat o użyciu i zakończ z kodem stanu
oznaczającym sukces.
--version
Wypisz informację o wersji na standardowe wyjście,
potem zakończ.
KOMUNIKATY OSTRZEGAWCZE
Ustawienie zmiennej środowiskowej POSIXLY_CORRECT wyłącza
niektóre ostrzeżenia i komunikaty o błędach, dla ścisłej
FSF Narzędzia Tekstowe GNU 4
tr(1) tr(1)
zgodności z POSIX.2. Komunikaty te występują normalnie w
następujących okolicznościach:
1. Gdy podano opcję --delete, ale nie --squeeze-repeats, a
podano łańcuch2, GNU tr domyślnie wypisuje komunikat o
użyciu i kończy pracę, ponieważ łańcuch2 nie zostałby
użyty. Specyfikacja POSIX mówi że łańcuch2 należy w tej
sytuacji zignorować. Jednak milczące ignorowanie argu
mentów to zły pomysł.
2. Gdy podano niejednoznaczne ósemkowe escapeowania. Dla
przykładu, \400 to faktycznie \40 plus cyfra 0, ponieważ
ósemkowa wartość 400 nie mieści się w pojedynczym bajcie.
Zauważ że GNU tr nie zapewnia pełnej kompatybilności z BSD
lub System V. Dla przykładu, nie istnieje opcja
wyłączająca interpretację konstrukcji POSIXowych
[:alpha:], [=c=], i [c*10]. GNU tr nie usuwa także
automatycznie bajtów zerowych, w odróżnieniu od trady
cyjnych wersji UNIXowych, w których nie ma sposobu
zachowania bajtów zerowych.
FSF Narzędzia Tekstowe GNU 5