Get a life

Filtre de text avansate

Până acum am folosit câteva filtre de text precum tr, cut sau grep, fiecare având câte un scop binedefinit, însă ele nu vor putea face absolut orice operație am vrea noi să facem asupra unui text. Pentru asta au fost inventate câteva filtre de text mai avansate precum sed și awk.

sed

Înainte să începeți acest tutorial, navigați către calea /home/student/uso-lab/05-cli/support/get-a-life/sed-tutorial.

În acest director avem fișierul songs.txt cu următorul conținut:

student@uso:~/.../support/get-a-life/sed-tutorial$ cat songs.txt 
1, Justin Timberlake, Title 545, Price $6.30
2, Taylor Swift, Title 723, Price $7.90
3, Mick Jagger, Title 610, Price $7.90
4, Lady Gaga, Title 118, Price $6.30
5, Johnny Cash, Title 482, Price $6.50
6, Elvis Presley, Title 335, Price $6.30
7, John Lennon, Title 271, Price $7.90

Vrem să înlocuim toate aparițiile prețului $6.30 cu $7.30. Vom folosi sed pentru a face acest lucru.

student@uso:~/.../support/get-a-life/sed-tutorial$ sed 's/6\.30/7.30/' songs.txt > songs2.txt
student@uso:~/.../support/get-a-life/sed-tutorial$ cat songs2.txt 
1, Justin Timberlake, Title 545, Price $7.30
2, Taylor Swift, Title 723, Price $7.90
3, Mick Jagger, Title 610, Price $7.90
4, Lady Gaga, Title 118, Price $7.30
5, Johnny Cash, Title 482, Price $6.50
6, Elvis Presley, Title 335, Price $7.30
7, John Lennon, Title 271, Price $7.90

awk

Mai devreme am văzut că putem extrage numele tuturor utilizatorilor din sistem folosind tr. Vrem să facem asta folosind și filtrul awk.

Ne amintim că informațiile despre toți utilizatorii din sistem se află în fișierul /etc/passwd.

student@uso:~/.../support/get-a-life/sed-tutorial$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
(...)

Pentru a extrage doar prima coloană, vom folosi următoarea comandă:

student@uso:~/.../support/get-a-life/sed-tutorial$ awk -F: '{print $1}' /etc/passwd
root
daemon
bin
(...)

Mai sus am prezentat doar câte un exemplu pentru fiecare filtru. Puteți găsi mult mai multe informații despre sed, awk și multe altele aici.

Exerciții

  1. Scrieți un script care trebuie să schimbe directorul de lucru în ~. De ce nu ar merge dacă am scrie pur și simplu cd ~ în script? (Hint: source)
  2. Mutați-vă la calea ~/uso-lab/05-cli/support/get-a-life/ex2/ și rulați scriptul just_regular_updates_here.sh. După rularea scriptului închideți terminalul curent și deschideți unul nou. Continuați să folosiți comenzile de bază (ls, cat). Observați ce se întâmplă și rezolvați problema.
  3. La calea ~/uso-lab/05-cli/support/get-a-life/ex3/ se află fișierul image.png. Inspectați tipul fișierului. Scopul acestui exercițiu este să aflați un mesaj secret. (Hint: file)
  4. În directorul ~/uso-lab/05-cli/support/get-a-life/ex4/ se află numeroase fișiere. Să se creeze o arhivă cu fișierele ce au o dimensiune mai mare de 10MB.
  5. Să se creeze un script care pornește programul firefox doar dacă acesta nu rulează deja. Altfel, nu-l pornește, ci doar afișează informații despre el. Configurați acest script să ruleze din cron la fiecare 5 minute. (Hint: cron)
  6. Realizați un script care să creeze câte o arhivă pentru fiecare branch al repository-ului. (Hint: man git, for)
  7. Folosind tot website-ul de aici, modificați prompt-ul astfel încât să vă arate și branch-ul curent Git pe care vă aflați.

Înainte:

student@uso:~$

După:

student@uso:~[lab-05-cli]$
uso/laboratoare/new/05-cli/get-a-life.txt · Last modified: 2019/10/31 11:32 by adrian.zatreanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0