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
trasendab või eemaldab märkecutvõtab välja veerge või väljupastekleebib ridu kõrvuticolumnvormib tabelistringskuvab 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
trsobib lihtsaks märgivahetusekscutsobib lihtsa eraldajaga väljade võtmisekscolumnteeb käsuväljundi loetavamaksstringsaitab 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-4võ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:
cutvõtab logi algusetr '=' ' 'teeb võtme-väärtuse osad loetavamakscolumn -tjoondab 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/lson binaarfailstringsü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
LFvõiCRLF
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\nteeb Windowsi moodi reavahetusetr -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
- Muuda tekst käsuga
trsuurtähtedeks. - Lõika kooloniga eraldatud failist välja teine väli.
- Vorminda väike tabel
column -tabil. - Võta
data/app.logfailist välja ainult logitase käsugacut. - Tee ühest väikesest väljundist veeruline vaade
column -tabil.