Linuxi regulaaravaldise õpetus: Grep Regexi näide

⚡ Nutikas kokkuvõte

Linuxi regulaaravaldised on spetsiaalsed märgijadad, mis otsivad andmeid ja sobitavad keerulisi mustreid sellistes tööriistades nagu grep, sed ja vi, kasutades teksti täpseks filtreerimiseks põhi-, intervall-, laiendatud ja sulgudega laiendamise vorme.

  • 🔎 Mis need on: Regulaaravaldised, lühendatult regexp või regex, kirjeldavad otsingu ja vastete leidmise tekstimustreid.
  • 🧩 Põhikomplekt: Sümbolid nagu . ^ $ * ja \ on mustri ankur-, kordus- ja paomärgid.
  • 🔢 Intervall: Sulgudes olevad nurksulud, näiteks {n} ja {n,m}, määravad, mitu korda eelnev märk kordub.
  • Laiendatud: Käskude grep -E, \+ ja \? abil leiavad vasteid ühe või mitu ning null või üks esinemist samast märgist.
  • 🧵 Breketite laiendamine: Looksulgud genereerivad jadast või komadega eraldatud loendist mitu stringi.
  • 🛠️ Kus kasutatakse: Tööriistad, sealhulgas grep, sed, tr ja vi, tuginevad teksti filtreerimiseks regulaaravaldistele.
  • 🤖 Tehisintellekti abi: Tehisintellekti assistendid ja GitHub Copilot saavad regulaaravaldiste mustreid kiiresti genereerida, selgitada ja siluda.

Linuxi regulaaravaldised grepiga — näited põhi-, intervall- ja laiendatud regulaaravaldistest

Regulaaravaldised on üks võimsamaid omadusi Linux Tekstitööriistad, mis võimaldavad teil andmeid kompaktsete mustrite abil sobitada, filtreerida ja teisendada. See leht selgitab põhi-, intervall- ja laiendatud vorme ning sulgude laiendamist koos töötatud grep-näidetega.

Mis on Linuxi regulaaravaldised?

Linuxi regulaaravaldised on erimärgid, mis aitavad otsida andmeid ja leida keerulisi mustreid. Regulaaravaldisi lühendatakse kui 'regexp' või 'regex'. Neid kasutatakse paljudes Linuxi programmides, näiteks grep, bash, rename, sed ja palju muud.

Regulaaravaldiste tüübid

Lihtsama arusaamise huvides õpime erinevaid regulaaravaldiste tüüpe ükshaaval. See leht hõlmab põhi-, intervall- ja laiendatud regulaaravaldisi ning lõpeb sulgude laiendamisega.

Põhilised Regulaaravaldised

Mõned levinumad käsud, mis töötavad regulaaravaldistega, on tr, sed, vija grep. Allolev tabel loetleb mõned põhilised regulaaravaldised.

Sümbol Kirjeldus
. Asendab mis tahes tähemärki
^ Sobib stringi algusega
$ Sobib stringi lõpuga
* Vastab eelnevale märgile null või enam korda
\ Esindab erimärke
() Rühmitab regulaaravaldisi
? Vastab täpselt ühele tähemärgile

Vaatame näidet. Kõigepealt käivitage olemasoleva faili sisu kuvamiseks käsk cat sample, nagu allpool näidatud.

Näidiskäsk cat, mis kuvab terminalis olemasoleva faili sisu

Järgmisena otsi sisu, mis sisaldab tähte 'a'. Allolev ekraanipilt näitab, kuidas grep tagastab iga rea, mis sisaldab tähte 'a'.

grep otsib näidisfailist ridu, mis sisaldavad tähte a

Sümbol '^' vastab stringi algusele. Allolev näide otsib sisu, mis algab tähega 'a'.

grep koos kursoriga, mis sobitab ainult a-tähega algavaid ridu

Filtreeritakse ainult read, mis algavad selle märgiga. Ridasid, mille alguses ei ole märki 'a', ignoreeritakse.

Vaatame teist näidet. Allolev ekraanipilt näitab taas näidisfaili sisu enne rea lõpu järgi filtreerimist.

Näidisfaili sisu enne t-tähega lõppevate ridade filtreerimist

Valige ainult need read, mis lõpevad tähega 't', kasutades ankrut '$', nagu allpool näidatud.

grep dollariankruga, valides ainult read, mis lõpevad t-tähega

Intervall Regulaaravaldised

Need avaldised määravad märgi esinemiste arvu stringis. Need on loetletud allpool.

Väljendus Kirjeldus
{mitte} Vastab täpselt eelnevale märgile, mis ilmub 'n' korda
{n,m} Vastab eelnevale märgile, mis esineb "n" korda, kuid mitte rohkem kui m
{n, } Vastab eelnevale märgile ainult siis, kui see ilmub "n" korda või rohkem

Näiteks filtreerige välja kõik read, mis sisaldavad märki 'p'. Allolev ekraanipilt näitab sobivaid ridu.

grep filtreerib näidisfaili ridade leidmiseks, mis sisaldavad märki p

Nüüd kontrollige, et märk 'p' esineb stringis täpselt kaks korda järjest. Selle süntaks on:

cat sample | grep -E p\{2}

Intervallimatši tulemus on näidatud allpool.

grep -E intervalliavaldis, mis vastab täpselt kaks korda esinevale tähemärgile p

Märkus. Nende regulaaravaldistega peate lisama -E.

Laiendatud regulaaravaldised

Need regulaaravaldised ühendavad mitu avaldist. Mõned neist on:

Väljendus Kirjeldus
\+ Vastab ühe või mitme eelmise märgi esinemisele
\? Vastab eelmise märgi nullile või ühele esinemisele

Näiteks otsige kõiki tähe 't' esinemisjuhte. Allolev ekraanipilt näitab tulemust.

grep otsib näidisfailist kõiki ridu, mis sisaldavad märki t

Oletame, et soovite filtreerida välja read, kus tähele 't' eelneb märk 'a'. Võite kasutada järgmist käsku:

cat sample|grep "a\+t"

Väljund on näidatud järgmisel ekraanipildil.

grep laiendatud avaldis, mis sobib ühe või mitme a-tähega, millele järgneb t

Trakside laiendamine

Sulgude laiendamise süntaks on kas jada või komadega eraldatud elementide loend looksulgude '{}' vahel. Jada algus- ja lõpp-elemendid eraldatakse kahe punktiga '..'.

Mõned näited on toodud allpool.

echo käsk, mis kasutab sulgude laiendamist mitme stringi genereerimiseks jadast ja loendist

Ülaltoodud näidetes loob käsk echo stringe sulgude laiendamise abil, luues ühest mustrist mitu stringi.

KKK

grep kasutab vaikimisi lihtsaid regulaaravaldisi. egrep lubab laiendatud avaldisi (sama mis grep -E) ja fgrep leiab vasteid fikseeritud stringidele ilma regulaaravaldiseta (grep -F). Kaasaegne GNU grep märgib egrepi ja fgrepi aegunuks, seega eelistage grep -E ja grep -F.

Märgiklassid sobivad märkide kategooriaga. Sulgudes olevad avaldised, näiteks [az], sobivad vahemikuga, samas kui POSIX-klassid, näiteks [[:alpha:]], [[:digit:]] ja [[:space:]], sobivad tähtede, numbrite ja tühikutega. Need hoiavad mustrid loetavatena ja teisaldatavatena erinevates lokaatides.

Lisa valik -i, näiteks grep -i “hello” näide. See sobib nii Hello, HELLO kui ka hello. Ilma -i valikuta on regulaaravaldised tõstutundlikud, seega käsitletakse suurtähte ja väiketähte kahe erineva märgina.

Shelli metamärgid (globbing) laiendavad failinimesid, kus * tähistab suvalisi märke ja ? tähistab ühte märki. Regulaaravaldised leiavad vastet failides olevale tekstile, kus * tähistab nulli või enamat eelnevat märki. Samad sümbolid tähendavad igas kontekstis erinevat asja.

Kasutage valikut -o, näiteks grep -o “a\+t” näide. Terve rea asemel prindib grep ainult mustrile vastava osa, ühe vaste rea kohta. See on kasulik näitekstracväärtused, näiteks e-posti aadressid või numbrid.

Kasutage vaheldumist toru sümboliga. Laiendatud režiimis leiab grep -E näidis „kass|koer“ read, mis sisaldavad sõna „kass“ või „koer“. Põhirežiimis peate selle asendama grepiga „kass\|koer“ näidisega. Alternatsioon võimaldab ühel käsul otsida korraga mitut mustrit.

Tehisintellekti assistendid saavad lihtsa ingliskeelse kirjelduse muuta toimivaks regulaaravalduseks, selgitada krüptilise mustri toimimist ja pakkuda parandusi, kui vastet ei leita. Masinõppe tööriistad tuvastavad ka korduvaid mustreid suurtes logifailides, mida oleks tüütu käsitsi kirjutada.

Jah. GitHubi koopia soovitab tippimise ajal otse kommentaarist või osalisest mustrist grep-käske ja regulaaravaldisi. See kiirendab keerukate avaldiste kirjutamist, kuigi enne genereeritud mustrile lootmist peaksite seda reaalsete näidisandmetega testima.

Võta see postitus kokku järgmiselt: