trs(1) filtr zastępujący łańcuchy

UŻYCIE

trs [-[r]e] 'ZASTĘPUJ_TO TYM [A_TO TYM]...'
trs [-[r]f] PLIK

OPIS

Kopiuje stdin na stdout zastępując każde wystąpienie danych napisów innymi. Podobnie jak tr(1), ale zamienia napisy, a nie tylko pojedyncze znaki.

Reguły (oddzielone odstępami) mogą być podane bezpośrednio po opcji -e albo mogą być przeczytane z PLIKU. Argument niepoprzedzony przez -e ani -f jest interpretowany jako skrypt, jeśli zawiera jakieś odstępy, a jako nazwa pliku, jeśli nie zawiera.

Komentarze można umieszczać od # do końca linii. Znak # w napisach musi być zapisany jako \\\\#.

Można używać standardowych eskejpów jak w C: \\a \\b \\e \\f \\n \\r \\t \\v \\\\ \\\\nnn. Dodatkowo \\s oznacza spację, a \\! - pusty łańcuch.

Można określić zbiory dopuszczalnych znaków na danej pozycji pomiędzy \\[ a \\]. Zakresy ASCII w zbiorach mogą być krótko zapisane jako PIERWSZY-OSTATNI. Jeśli zbiór składa się tylko z pojedynczego zakresu, \\[ i \\] mogą być pominięte.

Jeśli część napisu do zastąpienia jest ujęta w \\\\{...\\\\}, to tylko ta część jest zastępowana. Tekst poza \\\\{...\\\\} pełni rolę warunku: napis jest tłumaczony tylko jeśli jest poprzedzony danym tekstem i za nim jest inny. \\{ na początku albo \\} na końcu napisu mogą być pominięte. Tekst poza \\\\{...\\\\} jest traktowany jako nieprzetłumaczony.

Przed początkiem pliku i poza jego końcem są tylko znaki \\\\n. Na przykład \\n\\{.\\}\\n znajduje . stojącą samodzielnie w linii, włączając w to pierwszą linię, albo ostatnią nawet bez znacznika \\n.

Fragment postaci \\\\?x=N, gdzie x jest literą A-Za-z, a N jest cyfrą 0-9, zawarty w napisie docelowym przypisuje zmiennej x wartość 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ść 0. Może być wiele przypisań lub warunków w jednej regule - warunki muszą być wtedy wszystkie prawdziwe i wykonywane są wszystkie przypisania.

OPCJE

-e
Podaje reguły konwersji bezpośrednio w linii poleceń.
-f
Pobiera je z danego pliku.
-r
Odwraca każdą regułę. Dotyczy to tylko następnej opcji -e albo -f. Oczywiście to nie musi dać odwrotnego tłumaczenia! Każda reguła zawierająca któreś z \\{\\}\\[\\]\\{\\}\\- 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 \\\\{...\\\\}.
--help
wyświetla opis i wychodzi
--version
wyświetla informację o wersji i wychodzi

Może być wiele opcji -e albo -f. Wszystkie reguły są wtedy ładowane razem, przy czym wcześniejsze mają pierwszeństwo.

PRZYKŁAD

$ echo Leeloo |trs -e 'el n e i i aqq o\}\n x o u'
Linux

CZYM SIĘ TO RÓŻNI OD seda

Podstawowa różnica pomiędzy trsem a sed 's///g; ...' (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.

Inny przykład:

$ 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

Napis do zamiany może być pusty; musi wtedy być coś poza \\\\{\\\\}. W tym szczególnym przypadku tylko jedna taka reguła tworząca z niczego może być zastosowana na danej pozycji. Na przykład \\}\\x80\\-\\xFF @ poprzedza każdy znak z ustawionym najwyższym bitem przez @. Reguła postaci coś\\{ tam nie działa na końcu pliku.

ZOBACZ TEŻ

tr(1), konwert(1)

COPYRIGHT

Konwert jest pakietem służącym do konwersji między różnymi kodowaniami znaków.

Copyright (c) 1998 Marcin 'Qrczak' Kowalczyk

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.

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.

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

AUTOR

 __("<   Marcin Kowalczyk * [email protected] 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-