This shows you the differences between two versions of the page.
uso:laboratoare:new:06-auto:basics [2019/11/07 10:01] adrian.zatreanu [Expresii regulate] |
uso:laboratoare:new:06-auto:basics [2019/11/12 08:11] (current) maria.mihailescu [Expresii regulate] Fix regex |
||
---|---|---|---|
Line 102: | Line 102: | ||
CHIȚESCU E. Bogdan-Florentin 315CC 9 7.75 6.89 | CHIȚESCU E. Bogdan-Florentin 315CC 9 7.75 6.89 | ||
</code> | </code> | ||
- | Observăm, însă, că se face match și pe șirul ''Fl.'' și pe șirul ''F.'' reprezentând inițiale. Știm că un prenume conține doar litere mici și că **nu** se încheie cu punct (''.'', //dot//). Atunci extindem expresia regulată de mai sus la expresia ''%%[ -]F[a-z]+[^\.]%%''. Expresia regulată face match pe un șir care: | + | Observăm, însă, că se face match și pe șirul ''Fl.'' și pe șirul ''F.'' reprezentând inițiale. Știm că un prenume conține doar litere mici și că **nu** se încheie cu punct (''.'', //dot//). Atunci extindem expresia regulată de mai sus la expresia ''%%[ -]F[a-z]\+[^\.]%%''. Expresia regulată face match pe un șir care: |
* începe cu unul dintre caracterele spațiu (//blank//) sau minus (''-''); | * începe cu unul dintre caracterele spațiu (//blank//) sau minus (''-''); | ||
* continuă cu litera ''F'' (majusculă) | * continuă cu litera ''F'' (majusculă) | ||
Line 205: | Line 205: | ||
Kernel Interface | Kernel Interface | ||
Iface MTU RX-OK | Iface MTU RX-OK | ||
- | eth0 1500 2029 | + | eth0 1500 1955 |
lo 65536 359 | lo 65536 359 | ||
</code> | </code> | ||
Line 332: | Line 332: | ||
=== Constructia while read === | === Constructia while read === | ||
+ | |||
+ | Creați un nou script ''extract-name'' cu conținutul de mai jos: | ||
+ | <file Bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | IFS=',' | ||
+ | while read name group final_grade test_grade practical_grade; do | ||
+ | echo "$name" | ||
+ | done < students.csv | ||
+ | </file> | ||
Pentru parsare în shell folosim construcția ''%%while read ...%%''. Construcția este urmată de numele variabilelor în care vom reține câmpurile parsate din cadrul fiecărei linii. Folosim la intrare fișierul ''students.csv'' aflat în directorul părinte; este un fișier în format CSV (//Comma Separated Values//) folosind ca separator caracterul virgulă ('','', //comma//). Pentru a extrage doar numele studenților din fișierul de intrare vom rula scriptul ''extract-name'':<code> | Pentru parsare în shell folosim construcția ''%%while read ...%%''. Construcția este urmată de numele variabilelor în care vom reține câmpurile parsate din cadrul fiecărei linii. Folosim la intrare fișierul ''students.csv'' aflat în directorul părinte; este un fișier în format CSV (//Comma Separated Values//) folosind ca separator caracterul virgulă ('','', //comma//). Pentru a extrage doar numele studenților din fișierul de intrare vom rula scriptul ''extract-name'':<code> | ||
Line 353: | Line 363: | ||
Informații și pe [[http://en.wikipedia.org/wiki/Internal_field_separator|Wikipedia]]. | Informații și pe [[http://en.wikipedia.org/wiki/Internal_field_separator|Wikipedia]]. | ||
</spoiler> | </spoiler> | ||
- | |||
- | Să extindem scriptul pentru a afișa și numele și grupa. Conținutul noului script va fi: | ||
- | <file Bash> | ||
- | #!/bin/bash | ||
- | |||
- | IFS=',' | ||
- | while read name group final_grade test_grade practical_grade; do | ||
- | echo "$name,$group" | ||
- | done < students.csv | ||
- | </file> | ||
Pașii de mai sus puteau fi realizați și cu ajutorul comenzii ''cut''. Dar, în cazul parsării folosind construcția ''while read'' avem două avantaje: | Pașii de mai sus puteau fi realizați și cu ajutorul comenzii ''cut''. Dar, în cazul parsării folosind construcția ''while read'' avem două avantaje: |