.TH TRS 1 "17 Jul 1998" "Konwert" "Podręcznik użytkownika Linuxa"
.SH NAZWA
trs \- filtr zastępujący łańcuchy
.SH UŻYCIE
.B trs
.RB [ \- [ r ] e ]
.BI ' ZASTĘPUJ_TO
.I TYM
.RI [ A_TO
.IR TYM ].\|.\|.\|\fB'
.br
.B trs
.RB [ \- [ r ] f ]
.I PLIK
.SH OPIS
Kopiuje stdin na stdout zastępując każde wystąpienie danych napisów
innymi. Podobnie jak
.BR tr (1),
ale zamienia napisy, a nie tylko pojedyncze znaki.
.PP
Reguły (oddzielone odstępami) mogą być podane bezpośrednio po opcji
.B \-e
albo mogą być przeczytane z
.IR PLIKU .
Argument niepoprzedzony przez
.B \-e
ani
.B \-f
jest interpretowany jako skrypt, jeśli zawiera jakieś odstępy, a jako
nazwa pliku, jeśli nie zawiera.
.PP
Komentarze można umieszczać od
.B #
do końca linii. Znak
.B #
w napisach musi być zapisany jako
.BR \\\\\\\\# .
.PP
Można używać standardowych eskejpów jak w C:
.B \\\\a \\\\b \\\\e \\\\f \\\\n \\\\r \\\\t \\\\v \\\\\\\\
.BI \\\\\\\\ nnn\fR.
Dodatkowo
.B \\\\s
oznacza spację, a
.B \\\\!\|
\- pusty łańcuch.
.PP
Można określić zbiory dopuszczalnych znaków na danej pozycji pomiędzy
.B \\\\[
a
.BR \\\\] .
Zakresy ASCII w zbiorach mogą być krótko zapisane jako
.IB PIERWSZY \- OSTATNI\fR.
Jeśli zbiór składa się tylko z pojedynczego zakresu,
.B \\\\[
i
.B \\\\]
mogą być pominięte.
.PP
Jeśli część napisu do zastąpienia jest ujęta w
.BR \\\\\\\\{ .\|.\|.\| \\\\\\\\} ,
to tylko ta część jest zastępowana. Tekst poza
.BR \\\\\\\\{ .\|.\|.\| \\\\\\\\}
pełni rolę warunku: napis jest tłumaczony tylko jeśli jest poprzedzony
danym tekstem i za nim jest inny.
.B \\\\{
na początku albo
.B \\\\}
na końcu napisu mogą być pominięte. Tekst poza
.BR \\\\\\\\{ .\|.\|.\| \\\\\\\\}
jest traktowany jako nieprzetłumaczony.
.PP
Przed początkiem pliku i poza jego końcem są tylko znaki
.BR \\\\\\\\n .
Na przykład
.B \\\\n\\\\{.\\\\}\\\\n
znajduje
.B .\|
stojącą samodzielnie w linii, włączając w to pierwszą linię, albo
ostatnią nawet bez znacznika
.BR \\\\n .
.PP
Fragment postaci
.BI \\\\\\\\? x = N\fR,
gdzie
.I x
jest literą
.BR A - Za - z ,
a
.I N
jest cyfrą
.BR 0 - 9 ,
zawarty w napisie docelowym przypisuje zmiennej
.I x
wartość
.IR N ,
kiedy dana reguła jest użyta. Taki fragment w napisie źródłowym
powoduje, że dana reguła jest brana pod uwagę tylko jeśli ta zmienna ma
taką wartość. Początkowo wszystkie zmienne mają wartość
.BR 0 .
Może być wiele przypisań lub warunków w jednej regule \- warunki muszą
być wtedy wszystkie prawdziwe i wykonywane są wszystkie przypisania.
.SS OPCJE
.TP
.B \-e
Podaje reguły konwersji bezpośrednio w linii poleceń.
.TP
.B \-f
Pobiera je z danego pliku.
.TP
.B \-r
Odwraca każdą regułę. Dotyczy to tylko następnej opcji
.B -e
albo
.BR -f .
Oczywiście to nie musi dać odwrotnego tłumaczenia! Każda reguła
zawierająca któreś z
.B \\\\{\\\\}\\\\[\\\\]\\\\{\\\\}\\\\\-
jest uwzględniana tylko w jednym kierunku. Można wymusić, żeby dowolna
reguła była uwzględniana tylko w jednym kierunku, umieszczając napis do
przetłumaczenia w
.BR \\\\\\\\{ .\|.\|.\| \\\\\\\\} .
.TP
.B \-\-help
wyświetla opis i wychodzi
.TP
.B \-\-version
wyświetla informację o wersji i wychodzi
.PP
Może być wiele opcji
.B \-e
albo
.BR \-f .
Wszystkie reguły są wtedy ładowane razem, przy czym wcześniejsze mają
pierwszeństwo.
.SH PRZYKŁAD
.nf
$ echo Leeloo |trs -e 'el n e i i aqq o\\}\\n x o u'
Linux
.fi
.SH CZYM SIĘ TO RÓŻNI OD seda
Podstawowa różnica pomiędzy
.BR trs em
a
.B sed 's///g;
.RB .\|.\|.\| '
(wyłączając sedowe wyrażenia regularne) jest taka, że sed patrzy na
każdą regułę w kolejności ich podania i stosuje ją do całej linii
filtrowanego pliku, podczas gdy trs bada każdą pozycję i próbuje
wszystkich reguł na tej pozycji najpierw. W sedzie każda reguła dostaje
tekst wyprodukowany przez poprzednią, a w trsie każdy kawałek tekstu
jest tłumaczony najwyżej raz (jeśli więcej niż jedna reguła pasuje na
danej pozycji, reguła wymieniona wcześniej wygrywa). Właśnie dlatego sed
niezbyt nadaje się do tłumaczenia między zestawami znaków. Z drugiej
strony, tr tłumaczy tylko pojedyncze bajty, więc nie może być użyty do
konwersji Unikodu ani TeXowych / SGMLowych sposobów zapisu rozszerzonych
znaków.
.PP
Inny przykład:
.nf
$ echo 642 |trs -e '4 7 72 66 64 4'
42
$ echo 642 |sed 's/4/7/g; s/72/66/g; s/64/4/g'
666
.fi
.PP
Napis do zamiany może być pusty; musi wtedy być coś poza
.BR \\\\\\\\{\\\\\\\\} .
W tym szczególnym przypadku tylko jedna taka reguła tworząca z niczego
może być zastosowana na danej pozycji. Na przykład
.B \\\\}\\\\x80\\\\\-\\\\xFF @
poprzedza każdy znak z ustawionym najwyższym bitem przez
.BR @ .
Reguła postaci
.B coś\\\\{ tam
nie działa na końcu pliku.
.SH "ZOBACZ TEŻ"
.BR tr (1),
.BR konwert (1)
.SH COPYRIGHT
Konwert jest pakietem służącym do konwersji między różnymi kodowaniami
znaków.
.PP
Copyright (c) 1998 Marcin 'Qrczak' Kowalczyk
.PP
Niniejszy program jest oprogramowaniem wolnodostępnym; możesz go
rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej Licencji
Publicznej GNU, wydanej przez Fundację Wolnodostępnego Oprogramowania
- według wersji 2-giej tej Licencji lub którejś z późniejszych wersji.
.PP
Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej
gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH
ZASTOSOWAŃ. W celu uzyskania bliższych informacji - Powszechna
Licencja Publiczna GNU.
.PP
Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz
Powszechnej Licencji Publicznej GNU; jeśli nie - napisz do Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA  02111-1307  USA
.SH AUTOR
.ft CW
.nf
 __("<   Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.home.ml.org/
 \\__/       GCS/M d- s+:-- a21 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++
  ^^                W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK                  5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-
.fi
.ft R
