MC, 2025
Ilustracja do artykułu: Neįtikėtini Bash regex pattern match triukai!

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!

Imię:
Treść: