This shows you the differences between two versions of the page.
uso:laboratoare:laborator-08:basics [2021/11/14 11:47] andreea.nica1602 [Expresii regulate] |
uso:laboratoare:laborator-08:basics [2021/11/26 03:34] (current) mihai_daniel.soare [tr & sed] |
||
---|---|---|---|
Line 91: | Line 91: | ||
</code> | </code> | ||
- | Dacă vrem în schimb să selectăm studenții al căror prenume începe cu litera ''F'' trebuie să privim lucrurile altfel. Urmărind textul putem observa că prenumele sunt precedate fie de caracterul spațiu (//blank//) fie de caracterul minus (''-''). Pentru început vom folosi expresia regulată ''%%[ -]F%%'' care face match pe caracterul spațiu sau minus urmat de caracterul ''F'' majusculă. Comanda aferentă este: | + | Dacă vrem, în schimb, să selectăm studenții al căror prenume începe cu litera ''F'' trebuie să privim lucrurile altfel. Urmărind textul putem observa că prenumele sunt precedate fie de caracterul spațiu (//blank//) fie de caracterul minus (''-''). Pentru început vom folosi expresia regulată ''%%[ -]F%%'' care face match pe caracterul spațiu sau minus urmat de caracterul ''F'' majusculă. Comanda aferentă este: |
<code bash> | <code bash> | ||
student@uso:~/uso-lab/labs/06-scripting/support/00-basics$ grep '[ -]F' students.txt | student@uso:~/uso-lab/labs/06-scripting/support/00-basics$ grep '[ -]F' students.txt | ||
Line 133: | Line 133: | ||
Utilitarul **tr** permite translatarea, ștergerea și manipularea caracterelor primite la intrare. | Utilitarul **tr** permite translatarea, ștergerea și manipularea caracterelor primite la intrare. | ||
- | După cum am văzut în [[:uso:laboratoare:laborator-05|laboratorul precedent]], **sed** este un **stream editor** ce poate efectua transformări la nivel de string asupra unui text primit la intrare. În plus, sed poate primi expresii regulate ca argument de căutare. | + | Practic, **sed** este un **stream editor** ce poate efectua transformări la nivel de string asupra unui text primit la intrare. În plus, sed poate primi expresii regulate ca argument de căutare. |
| | ||
<note> | <note> | ||
Line 247: | Line 247: | ||
</code> | </code> | ||
- | În cazul în care există linii duplicate, putem folosi utilitarul **uniq** în conjuncție cu **sort** pentru a le elimina. În acest scop adăugăm o linie duplicata în ''students.csv'': | + | În cazul în care există linii duplicate, putem folosi utilitarul **uniq** în conjuncție cu **sort** pentru a le elimina. În acest scop, adăugăm o linie duplicata în ''students.csv'': |
<file> | <file> | ||
VLĂDUȚU I. Liviu-Alexandru,311CC,6,3.5,5.22 | VLĂDUȚU I. Liviu-Alexandru,311CC,6,3.5,5.22 | ||
Line 364: | Line 364: | ||
</spoiler> | </spoiler> | ||
- | 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: |
* putem afișa coloanele în ce ordine dorim; ''cut'' permitea afișarea de coloane doar în ordinea din fișierul de intrare; | * putem afișa coloanele în ce ordine dorim; ''cut'' permitea afișarea de coloane doar în ordinea din fișierul de intrare; | ||
* putem prelucra în continuare, în cadrul construcției ''while read'' informația parsată. Spre exemplu, afișarea poate avea forma %%"Studentul ... face parte din grupa ..."%%. | * putem prelucra în continuare, în cadrul construcției ''while read'' informația parsată. Spre exemplu, afișarea poate avea forma %%"Studentul ... face parte din grupa ..."%%. |