Neįtikėtini Bash regex pattern match triukai!
Ar kada nors bandėte naudoti „regex“ (reguliariąsias išraiškas) savo Bash scenarijuose, bet susidūrėte su painiomis sintaksėmis ar nesuprantamais rezultatais? Nesate vieni! Šiame straipsnyje panagrinėsime bash regex pattern match, paaiškinsime, kaip jis veikia, ir pateiksime daugybę bash regex pattern match przykłady, kad galėtumėte greitai ir su šypsena suprasti šią svarbią Bash dalį.
Kas yra „regex“ ir kodėl verta jį naudoti?
Reguliariosios išraiškos – tai būdas aprašyti tekstinius modelius, leidžiantis ieškoti ar patvirtinti teksto struktūrą. Bash regex pattern match suteikia galimybę patikrinti, ar kintamasis atitinka tam tikrą šabloną. Tai itin naudinga automatizacijai, failų tvarkymui, įvesties patikrinimui ir dar daugiau!
Paprasčiausias pavyzdys: ar kintamasis atitinka skaičių?
#!/bin/bash input="12345" if [[ $input =~ ^[0-9]+$ ]]; then echo "Tai yra skaičius!" else echo "Tai nėra skaičius." fi
Šiame pavyzdyje bash regex pattern match naudojamas patikrinti, ar kintamasis „input“ sudarytas tik iš skaitmenų. Naudojama =~ operatorius – tai raktas į regex stebuklus!
Kaip veikia =~ operatorius?
=~ leidžia palyginti kintamąjį su regex šablonu. Tai nereiškia tiesioginio palyginimo, kaip su ==, bet leidžia naudoti sudėtingesnes sąlygas. Šablonas įrašomas tarp slashes nebūtinai (skirtingai nei Perl ar sed).
Pavyzdys: patikrinti el. pašto adresą
email="vardas@example.com"
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
echo "Galiojantis el. pašto adresas!"
else
echo "Neteisingas el. paštas."
fi
Čia bash regex pattern match padeda aptikti, ar pateiktas el. pašto adresas turi validžią struktūrą. Šis regex gana išsamus, tačiau labai efektyvus.
bash regex pattern match przykłady su failų vardais
filename="nuotrauka_2023.jpg"
if [[ $filename =~ ^nuotrauka_[0-9]{4}\.jpg$ ]]; then
echo "Failo pavadinimas galioja!"
else
echo "Klaidingas failo pavadinimas."
fi
Šiame pavyzdyje tikriname, ar failo vardas prasideda žodžiu "nuotrauka_", po to seka 4 skaitmenys ir baigiasi ".jpg". Tai puikiai tinka, jei norite automatiškai atrinkti specifinius failus.
Kaip išgauti reikšmes iš regex grupių?
Bash leidžia naudoti „grupes“ regex’e ir jas panaudoti vėliau, ištraukiant konkretų tekstą:
tekst="Kaina: 42.99 EUR"
if [[ $tekst =~ Kaina:\ ([0-9]+\.[0-9]{2})\ EUR ]]; then
echo "Rasta kaina: ${BASH_REMATCH[1]}"
fi
Grupės saugomos kintamajame BASH_REMATCH. Indeksas [0] saugo visą atitikmenį, o [1] – pirmąją grupę. Nuostabu, tiesa?
Patarimai rašant regex Bash’e
- Venkite kabučių regex išraiškoje – tai gali sutrukdyti šablonui veikti.
- Visada pabandykite regex interaktyviuose įrankiuose kaip regex101.com (nustatykite ECMAScript).
- Atminkite, kad
[[ ]]yra reikalinga regex’e. Viengubi [ ] neveiks su=~.
Pavyzdys: datos formatas
date="2025-04-30"
if [[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "Tinkamas datos formatas (YYYY-MM-DD)"
else
echo "Netinkama data!"
fi
bash regex pattern match čia naudojamas siekiant tikrinti datos struktūrą. Gera praktika rašant scenarijus, kurie reikalauja datos įvedimo.
Regex loginiai operatoriai?
Nors Bash neturi tiesioginių regex loginių operatorių, jūs galite juos imituoti naudodami || ir &&:
if [[ $input =~ foo ]] || [[ $input =~ bar ]]; then echo "Atitinka 'foo' arba 'bar'" fi
Tokiu būdu galima tikrinti kelių šablonų atitikimą.
Regex naudojimas kartu su case sakiniu
read -p "Įveskite savo vardą: " vardas
case $vardas in
[A-Z]*)
echo "Vardas prasideda didžiąja raide"
;;
*)
echo "Vardas neprasideda didžiąja raide"
;;
esac
Nors case nepalaiko viso regex galimybių rinkinio, tai gali būti naudinga paprastoms struktūroms.
Ką daryti su specialiais simboliais?
Bash regex pattern match interpretuoja simbolius kitaip nei kitos kalbos (pvz. Python ar JavaScript), todėl reikia vengti „backslash“ dvigubo naudojimo ir žinoti, kurie simboliai turi specialią reikšmę: ., +, ?, [ ], ^, $, ir t.t.
Regex scenarijai praktikoje: filtravimas log failų
while read -r eilute; do
if [[ $eilute =~ ERROR ]]; then
echo "Klaida rasta: $eilute"
fi
done < /var/log/syslog
Galite naudoti bash regex pattern match automatizuoti žurnalo analizę – ieškoti klaidų, perspėjimų ar kitų svarbių žinučių.
Regex + find + grep + sed = supergalia
Regex naudojamas ne tik su Bash bet ir su kitomis priemonėmis kaip grep, sed ar awk. Bet naudoti jį tiesiai su Bash – tai patogu ir greita.
Išvados
Regex nebūtinai turi būti bauginantis. Tinkamai išmoktas ir panaudotas, jis tampa vienu galingiausių įrankių jūsų Bash skriptų arsenale. Su bash regex pattern match jūs galite filtruoti, validuoti ir interpretuoti tekstus taip, kaip norite. Naudodami pateiktus bash regex pattern match przykłady, turėtumėte drąsiai nerti į regex pasaulį ir kurti pažangius scenarijus, kurie jus džiugins savo elegancija!
Linkime sėkmingų regex nuotykių ir nepamirškite – praktika daro meistrą!

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!