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.

Poprzedni artykułRozszerzanie partycji w Raspbianie pod Raspberry Pi
Następny artykułCinnamon 1.6

13 KOMENTARZE

    • 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/"; }

    • Sed prosty. No rozumiem. $ znakiem końca linii. No rozumiem. Zamienię literkę l na enter:
      "echo ala |sed 's/l/$/'
      a$a"
      Nie rozumiem.

ZOSTAW ODPOWIEDŹ

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj