29Jun
Ne glede na to, ali ste z Grepom iskali ali gledate programe, ki vam lahko preimenujejo datoteke, ste se verjetno spraševali, ali je bilo naenkrat preprosteje opravljeno delo. K sreči, obstaja in se imenuje »regularni izrazi«.
( Comic from XKCD.com)
Kaj so regularni izrazi?
Redni izrazi so izjave, oblikovane na zelo specifičen način in ki lahko predstavljajo veliko različnih rezultatov. Znani tudi kot "regex" ali "regexp", se uporabljajo predvsem pri iskanju in nameščanju datotek. En regex se lahko uporabi kot formula za ustvarjanje številnih različnih možnih rezultatov, od katerih se vsi iščejo. Druga možnost je, da določite, kako naj bo skupina datotek dodeljena z navedbo regex-a, vaša programska oprema pa se lahko postopoma premakne na naslednji nameravani izhod. Na ta način lahko preprosto in učinkovito preimenujete več datotek v več mapah in se lahko premikate po omejitvah preprostega sistema za številčenje.
Ker se uporaba regularnih izrazov opira na posebno sintakso, mora biti vaš program sposoben branja in razčlenjevanja. Veliko programov za preimenovanje paketnih datotek za Windows in OS X podpirata regexps, kot tudi orodje GREP za iskanje po več platformah( ki smo se dotaknili v našem Bash Scripting za začetni vodnik) in orodju za ukazno vrstico Awk za * Nix. Poleg tega jih uporabljajo številni alternativni upravitelji datotek, orodja za lansiranje in orodja za iskanje ter imata zelo pomembno mesto v programskih jezikih, kot so Perl in Ruby. Druga razvojna okolja, kot so. NET, Java in Python, kot tudi prihajajoči C ++ 11, zagotavljajo standardne knjižnice za uporabo regularnih izrazov. Kot si lahko predstavljate, so lahko zelo uporabni, ko poskušate zmanjšati količino kode, ki ste jo vnesli v program.
Opomba o uhajajočih znakov
Preden vam prikažemo primere, bi radi nekaj poudarili. Uporabili bomo lupino bash in ukaz grep, ki vam bo pokazala, kako uporabljati regularne izraze. Težava je, da včasih želimo uporabiti posebne znake, ki jih je treba prenesti v grep, bash shell pa bo tolmačil ta znak, ker ga tudi lupina uporablja. V teh okoliščinah moramo "ubežati" te znake. To lahko postane zmedeno, ker se ta "uhajajoč" znakov pojavlja tudi znotraj regexps-a.Če na primer želimo vnesti to v grep:
\
ga bomo morali zamenjati z:
\\\ & lt;
Vsak poseben znak tukaj dobi en korak nazaj. Lahko pa uporabite tudi enojne narekovaje:
'\' '
Single quotes tell bash NOT razlagati, kaj je znotraj njih. Medtem ko zahtevamo, da se ti koraki sprejmejo, tako da lahko dokažemo, da vaši programi( še posebej na osnovi GUI-ja) pogosto ne zahtevajo teh dodatnih korakov.Če želite stvari preprosto in preprosto, bo dejanski regularni izraz podan kot citirano besedilo, v zaslonah v ukazni vrstici pa boste videli uničeno sintakso.
Kako se razširijo?
Regexps je zelo jedrnat način navedbe izrazov, tako da jih lahko vaš računalnik razširi v več možnosti. Oglejmo si naslednji primer:
tom [0123456789]
Kvadratni oklepaji - [in] - povedajte, da je stroj za analizo, da je vse, kar je znotraj, mogoče uporabiti katerikoli znak ENE.Karkoli je v tem oklepaju, se imenuje znakovni niz.
Torej, če bi imeli velik seznam vnosov in smo uporabili ta regex za iskanje, bi se ujemali naslednji izrazi:
- tom
- tom0
- tom1
- tom2
- tom3
in tako naprej. Naslednji seznam pa NE ustreza, zato se v svojih rezultatih NE prikaže: paradižnik
- ;regex ne predstavlja nobenih črk po "tom"
- Tom;Regex je občutljiv na velike in male črke!
Izberete lahko tudi iskanje z obdobjem( .), Ki bo omogočil vsak znak, dokler je prisoten znak.
Kot vidite, grepping s
. tom
ni prikazal izrazov, ki so na začetku imeli samo "tom".Celo "zeleni paradižnik" je prišel, ker se prostor pred "tom" šteje kot znak, vendar izrazi, kot je "tomF", na začetku niso imeli značaja in so bili zato ignorirani.
Opomba: privzeto vedenje Grepa je vrniti celotno vrstico besedila, ko se del ujema z vašo regex. Drugi programi to ne smejo storiti, to pa lahko izklopite v grep z zastavo »-o«.
Določite lahko tudi izmenjavo z uporabo cevi( |), kot je tu:
speciali( s | z) e
Tukaj najdete obe:
- specializira
- specializira
Pri uporabi ukaza grep moramo izogniti posebnim znakovam( ,|, in) s poševnicami, pa tudi z zastavico »-E«, da bi to delali in se izognili grdim napakam.
Kot smo omenili zgoraj, je to zato, ker moramo ukazu bash ukazati, da te znake prenese v grep in da ne naredi ničesar z njimi. Zastava '-E' pove grep, da uporabi oklepaje in cevi kot posebne znake.
Iščete lahko izključitev z uporabo kurca, ki je znotraj vašega oglatega oklepaja in na začetku nabora:
tom [^ F | 0-9]
Še enkrat, če uporabljate grep in bash, ne pozabite pobegnitita cev!
Izrazi, ki so bili na seznamu, a niso bili prikazani, so:
- tom0
- tom5
- tom9
- tomF
To se ni ujemalo z našo regex.
Kako lahko izkoristim okolje?
Pogosto iščemo na podlagi meja. Včasih želimo le strune, ki se pojavijo na začetku besede, na koncu besede ali na koncu vrstice kode. To je mogoče enostavno narediti s pomočjo tistega, kar imenujemo sidra.
Z uporabo noža( zunaj oklepajev) lahko označite »začetek« črte.
^ tom
Če želite poiskati konec črte, uporabite znak za dolar.
tom $
Vidite lahko, da naš iskalni niz prihaja pred sidrom v tem primeru.
Lahko tudi za tekme, ki se pojavijo na začetku ali koncu besed, ne pa celo vrstice.
\ & lt; tom
tom \ & gt;
Kot smo omenili v opombi na začetku tega članka, moramo te posebne znake ubežati, ker uporabljamo bash. Alternativno lahko uporabite tudi enojne narekovaje:
Rezultati so enaki. Prepričajte se, da uporabljate enojne narekovaje in ne dvojne narekovaje.
Drugi viri za napredne regexps
Tu smo dosegli le vrh ledene gore. Prav tako lahko iščete denarna sredstva, ki jih označuje oznaka valute, in poiščite kateri koli od treh ali več ustreznih izrazov. Stvari lahko postanejo zares zapletene.Če vas zanima več o rednih izrazih, si oglejte naslednje vire.
- Zytrax.com ima nekaj strani s posebnimi primeri, zakaj stvari počnejo in se ne ujemajo.
- Regular-Expressions.info ima tudi vodnik za morilce za veliko bolj naprednih stvari, pa tudi priročno referenčno stran.
- Gnu.org ima stran, namenjena uporabi regexpsa z grep.
Prav tako lahko gradite in preizkusite svoje regularne izraze z uporabo brezplačnega spletnega orodja Flash, ki se imenuje RegExr. Deluje, ko vnašate, je brezplačna in se lahko uporablja v večini brskalnikov.
Ali imate priljubljeno uporabo za regularne izraze? Ali poznate odlično preimenovanje serij, ki jih uporablja? Mogoče se hočete samo pohvaliti z grep-fu. Prispevajte svoje misli tako, da komentirate!