Program trs służy do zamiany łańcuchów znakowych. Jego działanie jest podobne do polecenia tr, jednak zamienia napisy a nie tylko pojedyncze znaki. Program ten jest częścią pakietu konwert służącego do konwersji plików z różnymi kodowaniami znaków.
Instalacja trs
Jeśli używamy dystrybucji zarządzającej pakietami za pomocą yuma, wpisujemy:
yum install konwert
Jeśli używamy dystrybucji zarządzającej pakietami za pomocą apt, wpisujemy:
apt-get install konwert
Niestety, część dystrybucji nie posiada tego programu w repozytoriach. Ze względu na fakt, że ostatnie wydanie powstało w 1998 roku, kompilacja może przysporzyć odrobinę trudności. Poniżej metoda polegająca na pobraniu źródeł programu konwert wraz z patchem, a następnie wyciągnięciu, spatchowaniu i skompilowaniu samego programu trs (wraz z plikiem man):
wget https://launchpad.net/ubuntu/+archive/primary/+files/konwert_1.8.orig.tar.gz --no-check-certificate wget https://launchpadlibrarian.net/40339444/konwert_1.8-11.2build1.diff.gz --no-check-certificate tar xzvf konwert_1.8.orig.tar.gz konwert-1.8/bin/trs.cc gzip -d konwert_1.8-11.2build1.diff.gz cat konwert_1.8-11.2build1.diff |head -n 991 | tail -n 67 konwert-1.8/bin/trs.cc.patch cd konwert-1.8/bin/ patch trs.cc trs.cc.patch g++ -Wall -O2 -fomit-frame-pointer -pipe trs.cc -o trs cd ../.. mv konwert-1.8/bin/trs ./trs rm -r konwert-1.8
Po skompilowaniu warto umieścić program w katalogu, który jest dopisany do zmiennej $PATH, czyli na przykład /usr/bin.
Sposób użycia trs
Program trs służy do kopiowania strumienia wejściowego do strumienia wyjściowego przy okazji zmieniając znaki. Przykład użycia:
echo "Ala ma kota" |trs -e 'm sprzedał'
Powyższe polecenie da nam w efekcie zdanie „Ala sprzedała kota”. Podczas podawania reguł można stosować standardowych eskejpów. Najczęściej używane:
- \n – kod znaku końca linii
- \s – kod spacji
- \t – kod tabulatora
- \\ – kod znaku \
- \/ – kod znaku /
- \nnn – nnn to kod oct znaku
- \xnn – nn to kod hex znaku
- \! – pusty łańcuch
Podczas używania programu pierwsze reguły mają pierwszeństwo, dzięki czemu możemy uzyskać taki efekt:
$ echo Leeloo |trs -e 'el n e i i aqq o\}\n x o u' Linux
Przykłady zastosowania trs
Programu można używać w skryptach, jest prostszy niż sed, a przy okazji pozwala na łatwe używanie znaku tabulatora czy znaku końca linii. Pozwala też zoptymalizować i przyspieszyć niektóre czynności.
Porównajmy ściąganie wszystkich plików *.jpg ze strony https://osworld.pl/spotkania. Pierwszy skrypt będzie używał opcji zaszytych w programie wget, drugi zaś będzie posiłkował się programem trs.
Skrypt 1
date wget -m -l 1 -A jpg https://osworld.pl/spotkania -o wget_skr_1 date cat wget_skr_1 |tail -n 2
Wynik działania
nie, 26 sie 2012, 16:19:41 CEST nie, 26 sie 2012, 16:21:00 CEST ZAKOŃCZONO --2012-08-26 16:21:00-- Pobrano: 113 plików, 11M w 49s (232 KB/s)
Skrypt 2
date wget https://osworld.pl/spotkania -O poczatek.html -o wget_skr_2 cat poczatek.html|trs -e '\x27 \n \" \n'|grep jpg >lista wget -m -i lista -o wget_skr_2 date cat wget_skr_2 |tail -n 2
Wynik działania
nie, 26 sie 2012, 16:23:35 CEST nie, 26 sie 2012, 16:24:06 CEST ZAKOŃCZONO --2012-08-26 16:24:06-- Pobrano: 26 plików, 6,6M w 27s (249 KB/s)
Czas wykonywania zadań w pierwszym przypadku to 1:19, w drugim 0:31. Nie bez znaczenia jest też fakt, że oba skrypty zapisały na dysku taką samą liczbę obrazków, natomiast pierwszy skrypt tak naprawdę pobrał 113 plików, drugi zaś 27 plików. W tym, przypadku nie była to wielka różnica, jeśli jednak na stronie byłyby komentarze lub więcej linków, wtedy różnica w czasie i ilości ściągniętych (niekoniecznie zapisanych) plików byłaby znacznie większa.























Nic nie chcę mówić, ale od tego jest sed ;P
Kluczowe słowo w tytule – prosta :p
Np zdefiniuj zamianę enterów na spacje sedem i trs, a następnie porównaj składnię.
trs to coś między tr a sedem,
A po co mi do tego trs? Tak samo szybko zrobię to sedem i samym tr, a nie trzeba instalować kolejnego narzędzia. To samo zresztą tyczy się przykładów w artykule.
Wyważanie dawno otwartych drzwi…
Zamiast marnować czas na szukanie takich narzędzi, sugeruję jednak nauczyć się co typowy Unix ma do zaoferowania…
Sed może wydawać się trudny, ale przy tak banalnych przykładach jest równie banalny w użyciu.
Pierwszy przykład:
echo Ala ma kota | sed s/kota/wszy/
Czy to na prawdę jest tak skomplikowane?
Pytałeś się o znaki końca linii, konwersję unix -> dos można by zrobić np tak:
sed 's/$/r/'
(Znaczek $ oznacza koniec linii, teraz wystarczy dodać dosowe r i gotowe)
Podsumowując:
1) sed jest w każdej dystrybucji, natomiast używając tego czegoś tworzysz zależność od niestandardowych narzędzi – powodzenia przy instalacji na obcej maszynie.
2) sed – proste rzeczy są proste, trudne są możliwe. Czy to coś pozwala na bardziej zaawansowaną edycję?
Na koniec…. Czy przypadkiem nie wystarczyło by zdefiniować czegoś takiego w shellu?
trs() { sed "s/$1/$2/"; }
Dokładnie tak. Prędzej zrobię coś sedem niż znajdę ten program, który nie wszędzie jest dostępny.
Sed prosty. No rozumiem. $ znakiem końca linii. No rozumiem. Zamienię literkę l na enter:
"echo ala |sed 's/l/$/'
a$a"
Nie rozumiem.
A da się jakoś zmienić żebym nie musiał wpisywać całego pacman-color tylko pacman jako menedżer pakietów z kolorowaniem?
man alias
Nie wiedzę powodu dla którego miałbym się uczyć sed, tr, trs skoro można wszystko to zrobić w awk, który też nie jest skomplikowany, a posiada od tych pierwszych znacznie większe możliwości.
Po co się uczyć AWK jako można pisać w C. Posiada on jeszcze większe możliwości.
Po co pisać programy, skoro można przepisywać na kartkę zmieniając słowa samemu?
argument równie trafny co stwierdzenie "windows jest lepszy od linuksa bo można uruchamiać na nim zarówno php jak i .net"
[…] trs – prosta zamiana tekstu […]