Cum se utilizează Expresii regulate și regulate pentru a filtra textul sau șirul în fișiere


Când rulam anumite comenzi în Unix/Linux pentru a citi sau a edita text dintr-un șir sau de un fișier, de cele mai multe ori încercăm să filtreze rezultatele într-o anumită secțiune de interes. Aici folosiți expresii regulate.

O expresie regulată poate fi definită ca un șir de caractere care reprezintă mai multe secvențe de caractere. Unul dintre cele mai importante lucruri despre expresiile obișnuite este că acestea vă permit să filtrați ieșirea unei comenzi sau a unui fișier, să editați o secțiune a unui fișier de text sau de configurare și așa mai departe.

Expresii regulate se fac din:

  1. Ordinary characters such as space, underscore(_), A-Z, a-z, 0-9.
  2. Meta characters that are expanded to ordinary characters, they include:
    1. (.) it matches any single character except a newline.
    2. (*) it matches zero or more existences of the immediate character preceding it.
    3. [ character(s) ] it matches any one of the characters specified in character(s), one can also use a hyphen (-) to mean a range of characters such as [a-f], [1-5], and so on.
    4. ^ it matches the beginning of a line in a file.
    5. $ matches the end of line in a file.
    6. \ it is an escape character.

    Pentru a filtra textul, trebuie să utilizați un instrument de filtrare a textului, cum ar fi awk . Vă puteți gândi la awk ca pe un limbaj de programare propriu. Dar, pentru ca acest ghid să folosească awk , îl vom acoperi ca un instrument simplu de filtrare a liniei de comandă.

    Sintaxa generală a awk este:

    # awk 'script' filename
    

    În cazul în care 'scriptul' este un set de comenzi înțelese de awk și sunt executate în fișier, numele fișierului.

    Funcționează prin citirea unei linii date în fișier, face o copie a liniei și apoi execută scriptul pe linie. Aceasta se repetă pe toate liniile din fișier.

    'scriptul are forma '/pattern/action unde pattern este o expresie regulată și action este ceea ce va face awk când va găsi modelul dat într-o linie.

    Cum se utilizează un instrument de filtrare Awk în Linux

    În următoarele exemple, ne vom concentra pe meta-caracterele pe care le-am discutat mai sus sub trăsăturile lui awk.

    Exemplul de mai jos imprimă toate liniile din fișierul /etc/hosts , deoarece nu este dat niciun model.

    # awk '//{print}'/etc/hosts
    

    În exemplul de mai jos, a fost dat un model localhost , astfel încât awk va corespunde liniei care are localhost în fișierul /etc/hosts .

    # awk '/localhost/{print}' /etc/hosts 
    

    (.) se va potrivi cu șirurile care conțin loc , localhost , localnet în exemplul de mai jos.

    Adică * l some_single_character c * .

    # awk '/l.c/{print}' /etc/hosts
    

    Se vor potrivi cu șiruri care conțin localhost , localnet , linii , capabile <

    # awk '/l*c/{print}' /etc/localhost
    

    Veți realiza, de asemenea, că (*) încearcă să vă aducă cea mai mare potrivire posibilă pe care o poate detecta.

    Să ne uităm la un caz care demonstrează acest lucru, luați expresia regulată t * t , care înseamnă căruri de potrivire care încep cu litera t și se termină cu t în rândul de mai jos:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 
    

    Veți obține următoarele posibilități atunci când utilizați modelul /t * t/:

    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
    

    Și (*) în caracterele /t * t/ permite un awk pentru a alege ultima opțiune:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
    

    De exemplu, setați [al1] , aici awk va potrivi toate șirurile care conțin caracterul a sau l într-o linie din fișierul /etc/hosts .

    # awk '/[al1]/{print}' /etc/hosts
    

    Următorul exemplu se potrivește cu șiruri de caractere care încep cu K sau k urmate de T

    # awk '/[Kk]T/{print}' /etc/hosts 
    

    Înțelegerea caracterelor cu awk:

    1. [0-9] means a single number
    2. [a-z] means match a single lower case letter
    3. [A-Z] means match a single upper case letter
    4. [a-zA-Z] means match a single letter
    5. [a-zA-Z 0-9] means match a single letter or number

    Să examinăm un exemplu de mai jos:

    # awk '/[0-9]/{print}' /etc/hosts 
    

    Toată linia din fișierul /etc/hosts conține cel puțin un număr [0-9] în exemplul de mai sus.

    Se potrivește cu toate liniile care încep cu modelul furnizat ca în exemplul de mai jos:

    # awk '/^fe/{print}' /etc/hosts
    # awk '/^ff/{print}' /etc/hosts
    

    Se potrivește cu toate liniile care se termină cu modelul furnizat:

    # awk '/ab$/{print}' /etc/hosts
    # awk '/ost$/{print}' /etc/hosts
    # awk '/rs$/{print}' /etc/hosts
    

    Vă permite să luați caracterul care o urmează, ca literal, adică considerați așa cum este.

    În exemplul de mai jos, prima comandă imprimă toate linii din fișier, a doua comandă nu imprimă nimic deoarece vreau să potrivesc o linie care are 5.00 , dar nu este folosit niciun caracter escape.

    Cea de-a treia comandă este corectă, deoarece un caracter de evacuare a fost folosit pentru a citi $ așa cum este.

    # awk '//{print}' deals.txt
    # awk '/$25.00/{print}' deals.txt
    # awk '/\.00/{print}' deals.txt
    

    rezumat

    Nu este vorba doar de instrumentul de filtrare a liniei de comandă awk , de exemplele de mai sus despre operațiile de bază ale awk. În următoarele părți vom avansa pe modul de utilizare a caracteristicilor complexe ale awk. Vă mulțumim pentru că ați citit și pentru orice adăugări sau clarificări, postați un comentariu în secțiunea de comentarii.

Toate drepturile rezervate. © Linux-Console.net • 2019-2020