Documente Academic
Documente Profesional
Documente Cultură
Expresii regulate
O expresie regulata (regex) reprezinta o modalitate (metoda) de identificare a unui
string (sir de caractere) dintr-un text dat conform anumitor reguli. Un regex este
reprezentat fizic printr-un string format din caractere speciale.
Reguli:
1. Blocul fundamental reprezinta un singur caracter si se selecteaza pe sine.
2. O expresie paranteza patrata (bracket expression) reprezinta o lista de caractere
cuprinsa intre "[" si "]" si descrie un singur caracter din acea lista. De exemplu, expresia
regulata b[aeiou]g selecteaza cuvintele bag, beg, big, bog, bug
3. Daca primul caracter este "^" (caret), acesta descrie orice caracter care nu se
gaseste in lista.
4. "[x-x]" - In interiorul unei expresii, paranteza patrata, un "range expression"
reprezinta 2 caractere separate prin -(minus) si selecteaza(identifica) orice caracter care
se gaseste intre cele 2 caractere din range expression. Expresia regulata a[2-4]z
selecteaza cuvintele a2z, a3z, a4z
5. "^" (caret) - In afara parantezelor drepte reprezinta un metacaracter care
identifica inceputul unei linii (daca este primul caracter din regex).
6. "$" reprezinta un metacaracter care identifica sfarsitul unei linii (daca este
ultimul caracter din regex).
7. Backslash ("\"), urmat de un caracter special, selecteaza caracterul special
respectiv. Caractere speciale sunt: ., *, [, \ (punct, asterix, paranteza dreapta deschisa si
backslash).
8. "?" (semnul intrebarii) selecteaza 0 sau 1 caractere anterioare.
9. "*" (asterix) selecteaza zero (0) sau mai multe caractere anterioare.
10. "+" (plus) selecteaza caracterul anterior o data sau de mai multe ori.
11. "{n}" Elementul precedent este selectat de n ori (exact).
12. "{n,}" Elementul precedent este selectat de n sau mai multe ori.
13. "{n,m}" Elementul precedent este selectat de cel putin n ori dar nu mai mult de
m ori.
14. caracterul . reprezinta orice caracter exceptand newline
15. \(REGEXP\) - grupeaz REGEXP pentru a fi folosita ca o subexpresie regulata
in sensul de mai sus. De exemplu, '(abcd)'* nseamn potrivire cu 0 sau mai multe
apariii ale secvenei 'abcd' in timp ce 'abcd*' nseamn potrivire cu 'abc' urmat de 0 sau
mai multe apariii ale caracterului 'd'. De asemenea, aceasta organizare a expresiilor
regulate permite referirea lor ulterioara prin constructii precum \1, \2 pana la \9. Astfel,
\1 desemneaz prima subexpresie regulata din cadrul unei expresii regulate, \2
desemneaz a doua subexpresie regulata, s.a.m.d.
Exemplu:
"\([a-z]\)\1" expresie regulata ce cauta 2 litere identice aa, bb, cc
"\([a-z]\)\1\{2\}" -expresie regulata ce cauta 3 litere identice bbb, ccc, ddd
16. Caracterul \b
trebui
precedate
de
caracterul
escape
sau
putem
folosi
comanda
Exemple
1.
Ancorare:
^ab
ab$
^$
- linie goala
^a[a-z0-9]
3.
- linie care incepe cu "a" urmat de orice caracter intre "a" si "z" sau "0" si "9"
Patternul a\?b se potriveste cu 'b' si 'ab'. Patternul a\+b\+ se potriveste cu
una sau mai multe apariii ale lui 'a' urmate de una sau mai multe apariii ale lui 'b'.
Patternurile '.*' si '.\+' se potrivesc cu toate sirurile de caractere; deosebirea dintre ele
este ca primul se potriveste si cu sirul vid in timp ce al doilea se potriveste cu toate
sirurile nevide.
4.
Gasirea tuturor liniilor care contin un string de tip CNP dintr-un fisier (se
5.
Daca se doreste gasirea tuturor liniilor care contin DOAR string de tip CNP
se foloseste "^" pentru ancorarea regex-ului la inceput de rand si "$" pentru ancorarea
regexului la sfarsit de rand.
^[127][0-9]\{12\}$
6.
Crearea unui fisier care sa contina toate fisierele si doar fisiere (de tip regular
file) din /etc eliminand liniile goale, liniile care contin cuvantul 'total' sau liniile care
afiseaza directoare.
ls -lR /etc/ | egrep -v '(^$|^total|^d)' > etc_content
Globbing characters
Globbingul este operatia de expandare a unui sablon wildcard in lista de cai ce
corespund sablonului. Un string este un sablon wildcard daca acesta contine unul din
caracterele: ?, *, [,].
* -reprezinta orice caracter, de oricate ori indiferent de pozitia in care apare: *ex*,
ex*, *ex; Exemplu:
cat *ex* -afiseaza continutul tuturor fisierelor al caror nume contine stringul
ex
? reprezinta exact un caracter necunoscut: ?ex poate reprezenta 1ex, 2ex, eex,
aex, etc
\ -escape character
Cautari
Grep si egrep
grep [options] PATTERN [FILE...] - cauta sabloane de text (string patterns) in fisiere
sau in outputul unei comenzi.
egrep [options] PATTERN [FILE...]- cauta sabloane de text folosind expresii regulate
extinse in fisiere sau in outputul unei comenzi
-i
= ignore case
-n
-R
= recursiv
-v
= invert match
-w
-H
-E
Exemple
1.
care se gaseste.
$ grep -n 'root' /etc/passwd
3.
Cautarea cuvantului text in fisierul myfile.txt. Vor fi afisate doar liniile care
contin exact cuvantul text nu si liniile in care acesta este parte a unui alt cuvant.
$ grep -w "curs" myfile.txt
5.
banana
8.
Alte exemple:
$egrep a?b fisier
$ egrep -c '^begin|end$' myfile.txt
$grep 'acesta\|curs' myfile.txt
Exercitii:
1. Gasiti toate fisierele din folderul /etc care contin stringul eth0 sau eth1
2. Gasiti toate fisierele din directorul dir1
Find
Comanda find cauta fisiere si directoare dupa criterii complexe in mod recursiv. De
obicei criteriile sunt: type, mtime, ctime, size si name.
find [path...] [expression]
Daca unul dintre argumente este numeric si are valoarea n se poate folosi:
+n
-n
n
-type f
-type d
-user uname
-group gname
-links n
-perm mode
-perm -mode
= all of the permission bits mode are set for the file
-perm +mode
= any of the permission bits mode are set for the file
-size n
-not
Exemple
1. Cauta recursiv fisiere cu dimensiunea mai mare de 2M care-l au owner pe root
$ find / -size +2M -user root -type f
2. Cauta fisiere din /etc care nu-l au owner pe root
$ find /etc -not -user root
3. Alte exemple
$ find /etc/ -name resol
$ find /etc/ -name resol*
$ find /etc/ -size +1M
$ find / -size +1M
$ find /var/ -size +1M user root
$ find /var/ -size +1M not user root
$ find /sbin/ -links +1
$ find /etc/ -type f
$ find /var/ -size +1M not user root
$ find . -atime -5
Exercitiu: Gasiti toate fisierele din directorul curent al caror nume incepe cu o litera
urmat de caracterul . si o extensie.
R: $ find . -name "[a-z]*.*"
Criteriile comenzii find sunt asociate folosind SI logic (optiunea -a care este
default) si SAU logic ( -o).
Comanda find permite executia unei comenzi pentru fiecare din rezultatele
intoarse.
Exemplu
Afisarea continutului fisierelor din directorul curent ale caror nume incepe cu fi.
find . -name "fi*" -exec cat '{}' \;
Locate
locate [options] PATTERN [FILE...] - cauta fisiere intr-o baza de date dupa nume sau
anumite pattern-uri.
Actualizarea bazei de date (/var/cache/locate/locatedb) cu denumirile si locatiile de
fisiere se face cu ajutorul comenzii updatedb.
$ updatedb
$ locate "*.png"
Rulati succesiv comenzile. Ce obsevati?
$ locate -b 'rez'
$ locate -b '\rez'
Sed
sed [options] script [input-file] filtreaza si modifica text
sed are mai multe comenzi dar cea mai folosita dintre acestea este substitutia:s Aceasta
comanda inlocuieste toate aparitiile unui string selectat de o expresie regulata cu o noua
valoare. s/regexp/replacement
Exemplu:
1.
10
20
30
40
50
Rulati comanda:
$ sed 's/pants/dresses/' 1.txt
Ce observati
0.89
banana
0.89
peach0.79
peach0.79
kiwi 1.50
pineapple
1.29
apple 0.99
apple 0.99
mango
2.20
Spatii de adrese
Exercitii:
1. Afisati liniile care incep cu o vocala sau cu litera p
2. Stergeti liniile care incep cu litera b
Sortari
Comanda sort
sort [OPTION]... [FILE]...
-b
--ignore-leading-blanks
-d
--dictionary-order
-f
--ignore-case
-n
--numeric-sort
-r
--reverse
-c
--check
-k
--key=POS1[,POS2]
-m
--merge
-o
--output=FILE
-t
--field-separator=SEP
-u
--unique
with
--zero-terminated
Exemple
1. Sortarea in ordine alfabetica (si apoi inversa) a liniilor din fisierul fis1
$ sort fis1
$ sort r fis1
2. Sortarea in ordine alfabetica dupa coloana a 2-a din fisier
$ sort k2 fis1
3. Sortarea in ordine alfabetica a liniilor sortate in functie de valoarea numerica de pe
coloana 3 din fisierul fis1 si eliminarea liniilor identice
$ sort unk3 fis1