Kuidas kasutada failides teksti või stringe Awk ja regulaaravaldisi
Kui käivitame Unixis/Linuxis teatud käske stringi või faili teksti lugemiseks või redigeerimiseks, proovime enamasti väljundi filtreerida antud huvipakkuvasse sektsiooni. Siin on regulaaravaldiste kasutamine kasuks.
Regulaaravaldise võib määratleda stringidena, mis tähistavad mitut tähemärkide järjestust. Regulaaravaldiste üks olulisemaid asju on see, et need võimaldavad teil käsu või faili väljundit filtreerida, teksti- või konfiguratsioonifaili osa redigeerida ja nii edasi.
Regulaaravaldised on tehtud:
- Tavalised tähemärgid, nagu tühik, alakriips (_), A-Z, a-z, 0–9.
- Tavaliste tähemärkidena laiendatud metamärgid hõlmavad järgmist:
-
(.)
see sobib mis tahes üksikmärgiga, välja arvatud uus rida. -
(*)
see vastab nullile või enamale sellele eelnenud vahetult tähemärgilt. -
[märk (id)]
see sobib mis tahes tähemärki (de) s tähistatud tähemärgiga, vahemiku tähistamiseks võib kasutada ka sidekriipsu(-)
tähemärke nagu[af]
,[1-5]
ja nii edasi. -
^
see sobib faili rea algusega. -
$
vastab faili rea lõpule. -
\
see on põgenemismärk.
Teksti filtreerimiseks tuleb kasutada teksti filtreerimise tööriista, näiteks awk. Võite mõelda awkist kui omaette programmeerimiskeelest. Kuid selle juhendi ulatusest awk kasutamise kohta käsitleme seda lihtsa käsurea filtreerimise tööriistana.
Awk üldine süntaks on:
# awk 'script' filename
Kui
skript
on käskude kogum, mida awk mõistab ja täidetakse failis, failinimi.See töötab nii, et loeb failis antud rea, teeb reast koopia ja käivitab seejärel reale skripti. Seda korratakse faili kõigil ridadel.
skript
on kujul/pattern/action
, kus muster on regulaarne avaldis ja tegevus on see, mida awk teeb, kui leiab antud mustri reast.Kuidas Awki filtreerimistööriista Linuxis kasutada
Järgnevates näidetes keskendume metakujunditele, mida arutasime eespool awk funktsioonide all.
Allpool olev näide prindib kõik read failis/etc/hosts, kuna mustrit pole antud.
# awk '//{print}'/etc/hosts
Allpool toodud näites on antud muster
localhost
, seega sobib awk reaga, millel on localhost failis/etc/hosts
.# awk '/localhost/{print}' /etc/hosts
(.)
sobib allpool toodud näites stringidega, mis sisaldavad loc, localhost, localnet.See tähendab, et * l mõned_ühemärgid c *.
# awk '/l.c/{print}' /etc/hosts
See sobib stringidega, mis sisaldavad localhost, localnet, read, mis on võimelised, nagu allpool toodud näites:
# awk '/l*c/{print}' /etc/localhost
Samuti mõistate, et
(*)
püüab teile võimalikult pikka vastet tuvastada.Vaadakem seda näitavat juhtumit, võtke regulaarne avaldis
t * t
, mis tähendab vaste stringe, mis algavad tähegat
ja lõpevad tähegat
alloleval real:this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
Mustri
/t * t/
kasutamisel saate järgmised võimalused:this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
Ja
(*)
/t * t/
metamärgis võimaldab awk-l valida viimase valiku:this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Võtame näiteks komplekti
[al1]
, siin sobivad awk kõik stringid, mis sisaldavad märkia
võil
või1
reas failis/etc/hosts.# awk '/[al1]/{print}' /etc/hosts
Järgmine näide vastab stringidele, mis algavad kas
K
võik
, millele järgnebT
:# awk '/[Kk]T/{print}' /etc/hosts
Mõista awk-ga märke:
-
[0-9]
tähendab ühte numbrit -
[a-z]
tähendab, et see sobiks ühe väiketähega -
[A-Z]
tähendab, et see sobib kokku ühe suure algustähega -
[a-zA-Z]
tähendab ühe tähe sobitamist -
[a-zA-Z 0-9]
tähendab, et need peavad vastama ühele tähele või numbrile
Vaatame allpool toodud näidet:
# awk '/[0-9]/{print}' /etc/hosts
Kogu faili/etc/hosts rida sisaldab ülaltoodud näites vähemalt ühte numbrit
[0-9]
.See sobib kõigi joontega, mis algavad allpool toodud näites toodud mustriga:
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts
See sobib kõigi antud mustriga lõppevate joontega:
# awk '/ab$/{print}' /etc/hosts # awk '/ost$/{print}' /etc/hosts # awk '/rs$/{print}' /etc/hosts
See võimaldab teil võtta seda järgivat tegelast sõnasõnalisena, st arvestada sellega just sellisena, nagu ta on.
Allpool toodud näites prindib esimene käsk kogu faili rida, teine käsk ei prindi midagi, sest ma tahan sobitada rea, millel on 25,00 dollarit, kuid põgenemismärki ei kasutata.
Kolmas käsk on õige, kuna põgenemismärki on kasutatud $-i lugemiseks sellisena, nagu see on.
# awk '//{print}' deals.txt # awk '/$25.00/{print}' deals.txt # awk '/\$25.00/{print}' deals.txt
Kokkuvõte
See pole veel kõik käsurea filtreerimise tööriista awk puhul, ülaltoodud näited on awki põhitoimingud. Järgmistes osades käsitleme awk keerukate funktsioonide kasutamist. Täname läbi lugemise ja kõigi täienduste või täpsustuste eest, postitage kommentaaride jaotisse kommentaar.
-