Documente Academic
Documente Profesional
Documente Cultură
Procesare de text
Tutorial
I. Expresii Regulate
Din mediul Windows deschideti pagina:
http://regexpal.com/
RegexPal este un tester online pentru expresii regulate. Testerul dispune de
doua casete text: pentru introducerea de expresii regulate (caseta de sus) si
pentru introducerea textului pe care vrem sa testam expresiile regulate
(caseta de jos).
Dupa completarea celor doua casete text vor fi evidentiate cuvintele care sunt
compatibile cu expresia regulata scrisa.
NOTA: Pentru a folosi metacaracterele . $ si ^ bifati casetele de sus:
# match at line breaks
# dot matches all
Caractere simple
In campul pentru text:
Mary had a little lamb.
And everywhere that Mary
went, the lamb was sure
to go.
In campul pentru expresii (pe rand una din expresiile de mai jos):
-m
- Mary
- had a
Cea mai simpla expresie regulata este cea care contine caractere simple.
Orice cuvant din textul tinta care contine caracterele in ordinea din expresie
va fi un match. Un caracter lower case nu este identic cu unul upper case.
Atentie caracterul
separator!).
spatiu
un
Caractere "escapate"
In campul text:
Caracterele speciale vor fi escapate.*
In campul pentru expresii:
- .*
- \.\*
Exista cateva caractere care au functii speciale. Daca insa ne dorim sa le
folosim ca si caractere normale trebuie sa le prefixam cu un backslash (\).
Atentie caracterul backlash este un metacaracter si trebuie escapat daca
vrem sa il folosim ca si character normal. \\.
Caractere pozitionale
In campul pentru text:
Mary had a little lambie.
And everywhere that Mary
went, thelamb was sure
to go
Atentie intre cuvintele the si lamb nu este spatiu.
In campul pentru expresii:
- ^Mary
- Mary$
- \blamb\b
Caracterul ^ (caret) marcheaza inceputul de linie si $ (dollar sign) marcheaza
sfasitul acesteia. Limita unui cuvant este marcata prin \b care tine loc de
spatiu, tab, newline si caractere de punctuatie.
Caracterul de continut
In campul pentru text:
Mary had a little lamb.
And everywhere that Mary
went, the lamb was sure
to go.
In campul pentru expresii:
- .a
Caracterul punct (.) poate semnifica orice caracter. In mod normal nu tine
locul caracterlui newline, dar in unele utilitare de prelucrare text se poate
forta acest lucru.
Intervale de valori
In campul pentru text:
Mary had a little lamb.
And everywhere that Mary
went, the lamb was sure
to go.
In campul pentru expresii:
- [a-z]a
Unei pozitii (caracter) din expresie ii se poate asigna un set de valori cu
ajutorul parantezelor drepte ([ si ]). Valorile pot avea forma unui interval
sau a unei multimi.
Expresia de mai sus va selecta toate literele lower case care au langa ele
caracterul a. Se poate selecta un spatiu prin \s sau o cifra prin \d.
Operatorul de complementare
In campul text:
Mary had a little lamb.
And everywhere that Mary
went, the lamb was sure
to go.
In campul pentru expresii:
- [^a-z]a
Simbolul caret are semnificatii diferite. In majoritatea cazurilor tine locul
inceputului de linie. Daca apare la inceputul unui set neaga setul de valori
(toate caracterele cu exceptia celor din set sunt luate in considerare).
Atentie! Caracterele lower case sunt diferite de cele upper case. ( [A-Z] !=
[a-z] )
Alternarea sabloanelor
In campul pentru text:
Unu, doi, trei la perete stai!
In campul pentru expresii:
- unu|doi|trei
Vor fi selectate toate cuvintele care se potrivesc cu unul din sabloanele
inlantuite prin ("|").
Operatori de multiplicare
In campul pentru text:
AAAD
ABBBBCD
BBBCD
ABCCD
AAABBBC
In campul pentru expresii:
- A+B*C?D
Operatorii de multiplicare se aplica asupra caracterului din stanga lor si au
urmatoarea semnificatie: ("+") are semnificatia "odata sau de mai multe ori",
("?") "de zero sau o singura data", ("*") "de zero sau mai multe ori".
Daca nu exista operatori de multiplicare fiecare caracter este luat o singura
data.
Exemple de aplicatii:
Substitutie
Sintaxa standard pentru substituie este urmatoarea:
sed 's/old_seq/new_seq/'
Comanda de mai sus va trimite catre sed continutul fisierului old_file prin
redirectare (operatorul <). Sed va inlocui in streamul primit prima aparitie a
secventei old_seq cu secventa new_seq iar streamul astfel mofificat va fi
salvat, tot prin redirectare ( operatorul >), in fisierul new_file.
In formatul instructiunii distingem 4 parti:
In
principiu
se
considera
Conventional este folosit caracterul slash ("/") dar in unele situatii este util sa
folosim un altul. Spre exemplu daca dorim sa schimbam o cale catre un
director primita dintr-un stream.
Daca folosim delimitatorul slash ("/"):
$ sed 's/\/usr/\local\/bin\/\/common\/bin/'<old_file >new_file
Daca folosim delimitatorul (:):
Substitutie globala
In cazul in care vrem sa aplicam substituia pe toate matchurile expresiei
regulate folosim switchul /g.
$ echo "123 99 abc" | sed 's/[0-9][0-9]*/& &/g'
123 123 123 123 123 99 99 99 99 99 abc
Afisare
In mod obisnuit sed afiseaza continutul intregului stream dupa modificare. In
cazul in care vrem sa afiseze doar liniile care urmeaza un anumit pattern
(functionalitate asematoare cu grep):
Restrictii
Cele mai simple restrictii se pot aplica la nivel de linie. Spre exemplu daca
vrem sa stergem primul numar de pe linia 3 :
$ sed '3 s/[0-9][0-9]*//' <old_file >new_file
Negarea restrictiei
Deseori este necesar sa prelucram anumite linii cu exceptia celor aflate intrun interval. Inversarea restrictiei se face cu ajutorul operatorului ("!").
$ sed -n '/match/ !p' <old_file
Exemplul de mai sus printeaza toate liniile mai putin cele care se potrivesc cu
sablonul "match".
Comanda Quit
Un alt un mod prin care putem sa restrangem aplicarea operatiilor este
comanda q (quit).
$ sed '11 q' <file
Afiseaza primele 10 linii din fisier.
file1
file2
file3
Tom programmer
Dick lawyer
Harry artist
Mary
had
a
little
lamb
Mary
Mary
Head
Format: head [optiuni] [fisier]
Actiune: Afiseaza inceputul unui fisier (implicit primele 10 linii).
Optiuni importante:
-c <num>, --bytes=<num>
afiseaza primii <num> bytes din fisier
-n <num>, --lines=<num>
afiseaza primele <num> linii din fisier
Exemplu:
$ head -2 file1
Tom 123 Main
Dick 4787 West
Tail
Format: tail [optiuni] [fisier]
Actiune: Afiseaza sfarsitul unui fisier (implicit ultimele 10 linii).
Optiuni importante:
-f, --follow
ramane deschis pentru afisare
--pid=<pid>
se termina follow atunci cand <pid> se termina
Exemplu:
$ tail -2 file1
Harry 98 North
Sue 1035 Cooper
Sort
Format: sort [optiuni] [fisier]
Actiune: Sorteaza inputul dupa un anumit criteriu.
Optiuni importante:
-f, --ignore-case
-n, --numeric-sort
-r, --reverse
-k <field>, --key=<field>
stabileste campul dupa care se face sortarea
Exemplu:
$ sort -n -k 2 file1
Harry 98 North
Tom 123 Main
Sue 1035 Cooper
Dick 4787 West
Uniq
Format: uniq [optiuni] [input [output]]
Actiune: Elimina liniile duplicate succesive primite de la input (sau stdin) si
scrie rezultatul in output (sau stdout).
Optiuni importante:
-u afiseaza doar liniile distincte
-d afiseaza doar duplicatele
-c numara aparitiile
Exemplu:
$ sort file3 | uniq
a
lamb
little
had
Mary
10
Nl
Format: nl [optiuni] [fisier]
Actiune: Numeroteaza liniile din input.
Optiuni importante:
-h <style>, -b <style>, -f <style>
stabileste stilul de numerotare pentru antet, corp si subsol
style: a - le numeroteaza pe toate; t - le numeroteaza pe cele care nu
sunt albe; n - nu le numeroteaza
-n <format>, --number-format=<format>
format: ln - alinere la stanga; rn - aliniere la dreapta; rz - aliniere la
dreapta cu padding de zerouri
-i line increment
Exemplu:
$ nl file1
1
Tom 123 Main
2
Dick 4787 West
3
Harry 98 North
4
Sue 1035 Cooper
Expand / unexpand
Format: expand [optiuni] [fisier] / unexpand [optiuni] [fisier]
Actiune: Converteste taburile in spatii. / Converteste spatille in taburi
Optiuni importante:
-t <num>, --tabs <num>
modifica numar de spatii dintr-un tab, implicit 8
Tr
Format: tr [optiuni] set1 [set2]
Actiune: Traduce o secventa de caractere, inlocuidu-le pozitional cu
caracterele din alt set primit ca parametru.
Optinui importante:
-t, --truncate-set1
-d sterge caracterele din setul 1
Exemplu:
$ echo "to upper case" | tr "a-z" "A-Z"
TO UPPER CASE
11
Wc
Format: wc [optiuni] [fisier]
Actiune: Realizeaza statistici legate de fisier.
Optiuni importante:
-l, --lines
-c, --bytes
-L, --max-line-length
-w, --words
-m, --chars
Exemplu:
$ wc -l file1 #
4 file1
$ wc -w file1 #
12 file1
$ wc -m file1 #
60 file1
$ wc file1
#
4
12
Cat / tac
Format: cat [optiuni] [fisier] / tac [optiuni] [fisier]
Actiune: Concateneaza outputul mai multor fisiere primite ca parametru./
Concateneaza fisierele in ordinea inversa a liniilor.
Optiuni importante:
-E, --show-ends
marcheaza sfasitul de linie cu $
-n, --number
numeroteaza liniile
-s, --sqeeze-blank
comprima spatiile intr-unul singur
-T, --show-tabs
marcheaza taburile cu ^I
-v, --show-nonprinting
afiseaza caracterele de control
Split
Format: split [option] [input [prefix]]
Actiune: Segmenteaza un fisier in mai multe fisiere.
Optiuni importante:
-b <size>, --bytes=<size>
12
-c <size>, --line-bytes=<size>
-l <lines>, --lines=<lines>
-d, --numeric-suffixes
default prefix: x
default suffixes: aa,ab,ac ...
Pr
Format: pr [optiuni] [fisier]
Actiune: Pregateste un fisier pentru imprimare
Optinuni importante:
-l <lines>, --length=<lines>
stabileste lungimea unei pagini
-h <text>, --header=<text>
stabileste textul pentru antet
-o <chars>, --indent=<chars>
stabileste dimensiunea marginii stangi
-w <chars>, --width=<chars>
stabileste latimea unei pagini
Fmt
Format: fmt [optiuni] [fisier]
Actiune: Formateaza textul.
Optiuni importante:
-w <width>
-t, --tagged-paragraph
indentarea primei linii
Od
Format: od [optiuni] [fisier]
Actiune: Afiseaza continutul fisierului in octal si alte baze de numeratie
Optiuni importante:
-t <type>
type: d2 - decimal shorts, d4 - decimal longs
x2 - hexadecimal shorts, x4 - hexadecimal longs
o2 - octal shorts (default), o4 - octal longs
13
Cut
Format: cut optiuni [fisier]
Actiune: Extrage sectiuni din fiecare linie a fisierului primit ca parametru
Optiuni importante:
-b <list>, --bytes=<list>
-c <list>, --characters=<list>
-f <list>, --fields=<list>
-d <char>, --delimitter=<char>
delimitator default este tab
-s, --only-delimited
Exemplu:
$ cut -d " " -f2 file1
123
4787
98
1035
Paste
Format: paste [optiuni] [fisiere]
Actiune: Concateneaza fisiere linie cu linie
Optiuni importante:
-d <list>, --delimiters=<list>
delimitator default este tab
-s, --serial
pune fiecare fisier pe linie
Exercitii:
$ paste file1 file2
Tom 123 Main
Tom programmer
Dick 4787 West Dick lawyer
Harry 98 North Harry artist
Sue 1035 Cooper
Join
Format: join [optiuni] fisier1 fisier2
Actiune: Concateneaza continutul a doua fisiere pe baza unor campuri
comune
Optiuni importante:
-t <char>
stabileste separatorul de camp, implicit este spatiu
14
-i
ignore case
-1 n, -2 m
specifica numerele de ordine al campului comun in cele doua fisiere
Exemplu:
$ join -1 1 -2 1 file1 file2
Tom 123 Main programmer
Dick 4787 West lawyer
Harry 98 North artist
IV. Vim
Vim este un editor modal (apasarea unei taste are efecte diferite in functie de
modul in care se lucreaza).
Urmariti pasii urmatori pentru a va familiariza cu vim:
Cand ati terminat de introdus text, parasiti modul Insert prin tasta ESC.
Sunteti iar in modul Normal.
Salvati fisierul: :w tutorial. In momentul in care tastati : cursorul se
1236547890
In modul normal, puteti naviga folosind tastele hjkl. Fiind pe homerow folosirea acestora e mai rapida decat folosirea tastelor sageti.
15
cuvant.
Adaugati nu astfel incat linia sa fie Azi invat sa nu folosesc Vim.
Iesiti din vim fara a salva. Folositi ! pentru a va rasti la el daca se
plange de ceva.
Reintrati in fisier.
Vom copia prima linie de 10 ori la finalul fisierului. Tastati Y (yank line
y mare) sau y$ (yank until end of line). Majoritatea actiunilor din modul
fi pozitionati pe primul 6.
Tasta x (x mic, nu x mare) sterge caracterul de sub cursor. In
16
17