Mustand: sisu ei ole veel tehniliselt ega keeleliselt täielikult kontrollitud ega toimetatud.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki Teksti teisendamine: tr, cut, paste, column, strings, mis kuulub osasse Osa IV: Tekst, otsing ja automatiseerimine.

Teksti teisendamine: tr, cut, paste, column, strings

Selles peatükis õpime väikeste käsureatööriistadega teksti ümber kujundama.

Loogika

Need käsud sobivad siis, kui tahad tekstivoo kuju kiiresti muuta ilma pikema skriptita. Need on seotud torude ja otsingupeatükkidega, sest neid kasutatakse sageli kohe pärast grep-i või enne sort-i.

Kiirspikker

  • tr asendab või eemaldab märke
  • cut võtab välja veerge või välju
  • paste kleebib ridu kõrvuti
  • column vormib tabeli
  • strings kuvab binaarfailist loetavad tekstijupid

Käivita need käsud


echo 'tere maailm' | tr '[:lower:]' '[:upper:]'
echo 'a,b,c' | tr ',' '\n'

printf 'nimi:vanus:linn\nMari:20:Tartu\n' > andmed.txt
cut -d ':' -f 1 andmed.txt
cut -d ':' -f 1,3 andmed.txt

printf 'nimi vanus\nMari 20\nJaan 21\n' | column -t

Millal need kasulikud on

  • tr sobib lihtsaks märgivahetuseks
  • cut sobib lihtsa eraldajaga väljade võtmiseks
  • column teeb käsuväljundi loetavamaks
  • strings aitab uurida tundmatuid binaarfaile

Päris näide: teksti puhastamine ja veergudeks tegemine

See peatükk muutub palju selgemaks siis, kui teha üks päris töövoog näidisandmefailiga.

Alusta nii:


cp data/sample-text.txt tekst.txt
head -n 3 tekst.txt

Kui tahad tekstist teha sõnade voo, sobib hästi:


tr ' ' '\n' < tekst.txt | head -n 20

Siin:

  • tr ' ' '\n' muudab tühikud reavahetusteks
  • üks mitmesõnaline rida laguneb sõnade reaks

Kui tahad kõik sõnad suurtähtedeks muuta:


tr '[:lower:]' '[:upper:]' < tekst.txt | head -n 3

See on hea näide, sest siin ei muudeta "mõtet", vaid ainult märkide kuju.

Päris näide: logirea tükeldamine

Fail data/app.log sobib hästi cut-i näitamiseks.


head -n 5 data/app.log
cut -d ' ' -f 1-4 data/app.log | head -n 5

Selle näite loogika:

  • eraldajaks on tühik
  • -f 1-4 võtab välja esimesed neli välja
  • näed kiiresti aega, logitaset, hosti ja moodulit

Kui tahad ainult logitasemeid:


cut -d ' ' -f 2 data/app.log | head -n 10

See on hiljem väga kasulik koos sort ja uniq -c-ga.

Päris näide: tee väljund loetavaks column abil

Kui tahad näidata logi lühikokkuvõtet veergudena, saab teha väikese vahefaili:


cut -d ' ' -f 1-4 data/app.log | head -n 10 | tr '=' ' ' | column -t

Siin toimub korraga mitu asja:

  • cut võtab logi alguse
  • tr '=' ' ' teeb võtme-väärtuse osad loetavamaks
  • column -t joondab väljundi veergudesse

See on hea koht, kus terminal hakkab välja nägema juba nagu tabel.

Päris näide: strings

strings on kõige õpetlikum siis, kui sisend ei ole tavaline tekstifail.

Lihtne näide süsteemi pealt:


strings /bin/ls | head -n 20

Siin:

  • /bin/ls on binaarfail
  • strings üritab sealt leida loetavaid tekstijuppe

See on hea meeldetuletus, et mitte kõik failid ei ole "lihtsalt tekst", isegi kui neist saab mõnikord teksti välja koukida.

UTF-8, täpitähed ja reavahetused

Tekstitöötluses on veel kaks praktilist detaili, mis tulevad väga kiiresti ette:

  • kodeering, tavaliselt UTF-8
  • reavahetuse kuju, tavaliselt LF või CRLF

Eesti tekstiga on see eriti tähtis, sest ÕÄÖÜ ei ole ASCII märgid.

Näide:


printf 'Õun\nÄmber\nÖö\nÜks\n' > tahed.txt
cat tahed.txt

Kui fail on UTF-8 kujul, näed täpitähti õigesti.

CRLF vs LF

Linuxis ja macOS-is on tavaline reavahetus LF. Windowsi failides kohtab tihti CRLF.

Näide:


printf 'üks\r\nkaks\r\n' > crlf.txt
cat crlf.txt
tr -d '\r' < crlf.txt > lf.txt

Siin:

  • \r\n teeb Windowsi moodi reavahetuse
  • tr -d '\r' eemaldab carriage return märgid
  • tulemuseks saad puhta LF-iga faili

Kui mõni tööriist käitub "imelikult", siis põhjus võib olla just reavahetustes, mitte käsus endas.

Minitest

  1. Muuda tekst käsuga tr suurtähtedeks.
  2. Lõika kooloniga eraldatud failist välja teine väli.
  3. Vorminda väike tabel column -t abil.
  4. Võta data/app.log failist välja ainult logitase käsuga cut.
  5. Tee ühest väikesest väljundist veeruline vaade column -t abil.