Teksti teisendamine: tr, cut, paste, column, strings
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.
Kiirülevaade
Eesmärk on muuta teksti kuju väikeste tööriistadega, kus iga käsk teeb ühe konkreetse sammu.
| Käsk | Milleks | Mida tavaliselt näed |
|---|---|---|
tr | muuda või kustuta märke | muutunud tekstivoog |
cut | võta välja välju või veerge | ainult valitud osad |
paste | pane read kõrvuti | ühendatud read |
column -t | joonda tabelilaadselt | loetavamad veerud |
strings | otsi binaarfailist teksti | loetavad tekstijupid ridadena |
Tüüpilised algaja vead
- aetakse segi märkide muutmine ja väljade lõikamine
- kasutatakse
cut-i keeruka CSV peal, kus lihtne eraldaja ei pruugi piisata - oodatakse, et
columnmuudab faili, kuigi ta ainult vormib väljundi ilusamaks
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
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
Nii muutub käsuväljund kiirelt tabelina loetavaks.
Päris näide: strings
strings on kasulik 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.
Peatüki täisspikker
Töövood
Eesmärk
need väikesed filtrid muudavad tekstivoo kuju kiiresti: märgid, väljad, veerud ja tabelid ilma eraldi skriptita
Põhikujud
echo 'tere maailm' | tr '[:lower:]' '[:upper:]'muuda suurtäheksecho 'a,b,c' | tr ',' '\n'tee ridadekscut -d ':' -f 1 andmed.txtvõta esimene välicut -d ':' -f 1,3 andmed.txtvõta mitu väljaprintf 'nimi vanus\nMari 20\n' | column -tjoonda tabelstrings /bin/ls | head -n 20loe binaarist tekstpastekleebi veerge
Olulisemad lipud, märgid ja kiirnupud
[:lower:]väiketähed[:upper:]suurtähedcut -dvali eraldajacut -fvali väljadcolumn -tjoonda tabelstringstekstijupid