“sed“, dupa cum ii spune numele, este un stream editor – adica filtreaza textul care i se paseaza, text care poate fi modificat. Un caz care poate fi intalnit este eliminarea liniilor goale dintr-un text. Ca sa eliminam liniile goale trebuie sa specificam operatorul “d“. Pentru inceput sa cream un fisier care va contine cateva randuri de text separate de linii goale:
[sergiu@localhost ~]$ cat > test.txt prima linie a doua linie a treia linie [sergiu@localhost ~]$
Ca sa afisam continutul fisierului eliminand liniile goale putem folosi “sed” dupa cum urmeaza:
[sergiu@localhost ~]$ sed '/^$/d' test.txt prima linie a doua linie a treia linie [sergiu@localhost ~]$
Prin “^$” ii spunem editorului ca partea care ne intereseaza e un rand gol – inceput de rand reprezentat de caracterul “^” urmat imediat de un sfarsit de rand reprezentat de caracterul “$“. Daca pe una din liniile goale exista spatii filtrul va functiona doar daca specificam intre “^” si “$” un numar nelimitat de spatii, adica schimband regula in “^\s*$” – “\s*” ii spune editorului ca un spatiu poate sa apara de zero sau mai multe ori intre inceputul si sfarsitul liniei.
Un exemplu asemanator putem face pentru a elimina toate comentariile dintr-un script. Stim ca in scripturile shell comentariile se fac prin plasarea caracterului “#” inainte de comentariu. Pentru a curata un fisier de comentarii vom inlocui regula “^$” cu caracterul “#“. Astfel pentru eliminarea comentariilor vom rula comanda:
[sergiu@localhost ~]$ sed '/#/d' test.txt
Acelasi “sed” poate fi folosit pentru a converti datele de tip CSV in TSV. Pentru asta vom folosi operatorul “s“:
[sergiu@localhost ~]$ cat > test.txt a,b,c,d e,f,g,h i,j,k,l [sergiu@localhost ~]$ sed 's/,/\t/g' test.txt a b c d e f g h i j k l [sergiu@localhost ~]$
Acelasi utilitar poate fi folosit si cand avem o lista de URL-uri care dorim sa le transformam rapid in linkuri care sa poata fi incluse intr-o pagina HTML, cum e in cazul urmator:
[sergiu@localhost ~]$ cat > test.txt http://www.lamp.ro http://www.regex.ro http://www.nethelp.ro [sergiu@localhost ~]$ sed 's|http://\([a-zA-Z0-9.:\/?\&=~%+_#-]*\)|<a href=\"http://\1\">\1</a>|g' test.txt <a href="http://www.lamp.ro">www.lamp.ro</a> <a href="http://www.regex.ro">www.regex.ro</a> <a href="http://www.nethelp.ro">www.nethelp.ro</a> [sergiu@localhost ~]$
Observati ca pentru a evita utilizarea caracterului “/” care ne-ar incurca in cazul de fata am folosit caracterul “|” iar “sed” a stiut sa il citeasca automat ca delimitator.
Bineinteles, “sed” poate face mult mai mult decat am prezentat aici. Folosindu-ne de expresiile regulate putem crea reguli complexe de filtrare care sa le folosim in timp real pentru a cauta in fisiere mari, cum ar fi fisierele log, informatiile care ne intereseaza. Pentru mai multe detalii legate de utilizarea “sed” va recomand sa cititi pagina de manual.
Popularity: 8% [?]





expresii regulare, cred ca ii mai corect
adica e pe undeva o sursa sigura de aflat cum ii corect? nu-s lamurit nici eu
Conform dictionarului si “regular” si “regulat” inseamna “ceva ce se supune unei reguli”. Ambele variante sunt corecte, dar m-am obisnuit cu “expresii regulate”. Poate e din cauza ca in general cand aud de “regular” ma gandesc la o actiune repetitiva, care se intampla cu regularitate, dar intr-un final e tot una
Salut, Sergiu
Am o problema, m-am muncit mult insa nu ii dau de capat, am incercat cu sed, cu tr… daca poti da-mi cateva indicii
din asa :
# cat -A Abonati1.txt
1^I4560^I^IBirsa Semion (24.07.06)^I^I^I^I^IMD-2003, str. Alexei Mateevici 27^I^I^I65-00^I^M$
2^I4312^I^IBostan Feodor (19.06.06)^I^I^I^I^IMD-2003, str. Alexei Mateevici 56 A^I^I^I65-00^I^M$
3^I4315^I^IBurlea Gheorghe (29.08.06)^I^I^I^I^IMD-2003, str. Alexei Mateevici 47 A^I^I^I65-00^I^M$
4^I5995^I^IBurlea Tudor (12.03.08)^I^I^I^I^IMD-2003, str. Alexei Mateevici 15A^I^I^I65-00^I^M$
5^I4320^I^ICiobanu Elena (26.05.06)^I^I^I^I^IMD-2003, str. Alexei Mateevici 51^I^I^I65-00^I^M$
6^I4310^I^ICodreanu Dumitru (02.07.05)^I^I^I^I^IMD-2003, str. Alexei Mateevici 49^I^I^I65-00^I^M$
sa fie de asa gen
# cat -A Abonati1.txt
1,4560,Birsa Semion,65-00^M$
2,4312,Bostan Feodor,65-00^M$
3,4315,Burlea Gheorghe,65-00^M$
Multumesc anticipat
Viorel
Nu e complicat, dar am o nelamurire. Asa apar in fisierul text caracterele cu ^ in fata? Sau sunt caractere speciale?
Caracterul “^I” separa coloanele unele de altele
Asta e un fisier .xls care e salvat in .txt pe care trebuie sa-l ajustez asa cum ti-am explicatm mai sus
cu sed, nu prea am reusit sa fac mare lucru dar cu awk a mers, iata comanda:
# awk ‘/str/ {print $1,$2,$3,$4,$11}’ Abonati.txt > Abonati3.txt
Viorel
Salut, Sergiu]
Ai putea sa ma ajuti?
cu ce as putea sterge parantezele cu tot cu informatia cuprinsa intre ele?
262,318,Boltins Carolina (19.12.06),65.00
sa fie
262,318,Boltins Carolina,65.00
multumesc
Salut,
Incearca asa: