TR(1) Narzędzia tekstowe GNU 2.0 TR(1) NAZWA tr - przetłumacz lub usuń znaki SKŁADNIA tr [-cst] [--complement] [--squeeze-repeats] [--truncate-set1] łańcuch1 łańcuch2 tr [-cs] [--complement] [--squeeze-repeats] łańcuch1 tr [-cd] [--complement] [--delete] łańcuch1 tr [-cds] [--complement] [--delete] [--squeeze-repeats] łańcuch1 łańcuch2 tr [--help] [--version] OPIS Dokumentacja niniejsza nie jest już utrzymywana i może być niedokładna lub niekompletna. Autorytatywnym źród łem jest obecnie dokumentacja Texinfo. Dostęp do niej uzyskasz wpisując w wierszu poleceń: pinfo tr lub info tr. Ta strona podr ęcznika opisuje polecenie tr w wersji GNU. tr kopiuje standardowe wejście na standardowe wyjście, dokonuj ąc jednej z poni ższych operacji: · przekład, opcjonalnie ściśnięcie powtórzonych znaków w wyniku · ściśnięcie powtórzonych znaków · usunięcie znaków · usuni ęcie znaków, potem ściśnięcie powtórzonych znaków 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 działa tr. Opcja --complement (-c) zastępuje zb1 jego dopełnieniem (wszystkimi znakami, których nie ma w zb1). OKREŚLANIE ZBIORÓW ZNAKÓW Format argumentów łańcuch1 i łańcuch2 przypomina format wyrażeń regu- larnych; jednakowoż, nie są to wyrażenia regularne, lecz tylko listy znaków. Większość znaków w tych łańcuchach reprezentuje po prostu same siebie, ale łańcuchy mogą też, dla wygody, zawierać wyliczone poniżej skróty. Niektórych z nich można użyć tylko w łańcuch1 lub łańcuch2, jak zaznaczono poniżej. Odwrotny ukośnik, 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. \r Control-M. \t Control-I. \v Control-K. \ooo Znak o warto ści podanej przez ooo, czyli od 1 do 3 cyfr ósemkowych. \\ Odwrotny ukośnik. Zakresy: notacja ‘m-n’ interpretowana jest jako 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 interpretowana jest jako 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: notacji ‘[:nazwa-klasy:]’ odpowiadają 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 akcep- towane są tylko klasy znaków ’upper’ i ’lower’, i to tylko wtedy, kiedy odpowiednie klasy ’upper’ i ’lower’ zostały okre ślone na tej samej pozycji wzgl ędnej w łańcuch1. Takie postępowanie określa konwersję wielkości liter. Nazwy klas podano niżej; jeśli poda się nieprawidłową nazwę klasy, powstaje błąd. alnum Litery i cyfry. alpha Litery. blank Poziomy biały znak. cntrl Znaki sterujące. digit Cyfry. graph Znaki drukowalne, z wyłączeniem spacji. lower Małe litery. print Znaki drukowalne, łącznie ze spacją. punct Znaki interpunkcyjne. space Pionowy lub poziomy biały znak (odstęp). upper Duże litery. xdigit Cyfry szesnastkowe. Klasy równowa żne: składnia ‘[=c=]’ oznacza 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, a 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 dwa polecenia są równoważne: tr aaa xyz tr a z Typowym zastosowaniem 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 niezdefiniowany. 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 obsługuje ten przypadek tak jak wersja z System V. Opcja ta jest ignorowana dla operacji innych niż tłumaczenie. Zachowywanie się jak tr z System V w tym przypadku psuje stosunkowo czę- sty idiom z BSD: tr -cs A-Za-z0-9 ’\012’ poniewa ż konwertuje na znaki nowej linii tylko bajty zerowe (pierwszy element dopełnienia zb1), a nie wszystkie znaki nie-alfanumeryczne. ŚCISKANIE POWTÓRZEŃ I USUWANIE 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 opcj ę --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ówczas 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: Usuwanie wszystkich bajtów zerowych: tr -d ’\000’ Umieszczenie ka żdego słowa w osobnej linii. 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*]’ Konwersja każdej sekwencji powtórzonych nowych linii w pojedynczą nową linię: tr -s ’\n’ Wyszukiwanie w dokumencie podwójnych wystąpie ń s łów. Na przykład, zdarza si ę pisanie "do do", powtórzonych słów rozdzielonych znakiem nowej linii. Poniższy skrypt powłoki Bourne’a najpierw zamienia każdą sekwencj ę znaków interpunkcyjnych i znaków pustych na pojedynczy znak nowej linii. Powoduje to umieszczenie każdego "słowa" w osobnej linii. Nast ępnie zamienia wszystkie du że litery na małe, i, na koniec, uruchamia ‘uniq’ z opcją ‘-d’, co powoduje wypisanie tylko słów, które były powtórzone obok siebie. #!/bin/sh cat "$@" \ | tr -s ’[:punct:][:blank:]’ ’0 \ | tr ’[:upper:]’ ’[:lower:]’ \ | uniq -d GNU tr akceptuje także następujące opcje, w kombinacji z innymi: --help Wyświetla informację o stosowaniu programu i dostępnych opcjach, kończy pracę. --version Wyświetla numer wersji programu i kończy pracę. KOMUNIKATY OSTRZEGAWCZE Ustawienie zmiennej środowiskowej POSIXLY_CORRECT wy ł ącza niektóre ostrze żenia i komunikaty o błędach, dla ścisłej 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 argumentów to zły pomysł. 2. Gdy podano niejednoznaczne specjalne sekwencje ósemkowe. 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 zgodności z BSD lub System V. Dla przyk ładu, nie istnieje opcja wyłączająca interpretację konstrukcji POSIX-owych [:alpha:], [=c=], i [c*10]. GNU tr nie usuwa tak że automatycznie bajtów zerowych, w odróżnieniu od tradycyjnych wersji UNIXowych, w których nie ma sposobu zachowania bajtów zerowych. ZGŁASZANIE BŁĘDÓW Błędy proszę zgłaszać, w jęz. ang., do . COPYRIGHT Copyright © 1999 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ZOBACZ TAKŻE expand(1), unexpand(1), textutils(1). OD TŁUMACZA Zaktualizowano i poszerzono wg dokumentacji Texinfo dla narzędzi tek- stowych GNU wersji 2.0. sierpień 1999 FSF TR(1)