Sed este o comandă utilizată pentru transformarea secvențelor de text. Comanda citește fișierele de intrare linie cu linie, apoi modifică fiecare linie corespunzător regulilor specificate într-un limbaj simplu, și afișează linia. Inițial, programul a fost creat ca un utilitar UNIX de către Lee E. McMahon la Bell Labs[1] între 1973 și 1974 dar acum este disponibil pe aproape orice sistem de operare care suporta o linie de comandă.
sed este una din primele comenzi UNIX pentru prelucrat text. A evoluat din comanda grep[2] și este folosit pe larg împreună cu AWK pentru prelucrări de text din linia de comandă sau prin intermediul programelor shell.
sed și AWK sunt deseori prezentați ca precursorii limbajului Perl, sintaxa s / / / prezentată mai jos a fost preluată în Perl fiind introdusă original în editorul ed.
Limbajul sed nu are variabile, iar structurile de control sunt primitive. Totuși, limbajul este considerat Turing-complete.[2] [3] Varianta GNU a limbajului sed adaugă o serie nouă de elemente de limbaj. Cea mai bine cunoscută este modificarea pe loc a fișierelor text folosind rezultatul rulării programului. Această facilitate a fost mai târziu preluată și de versiunea sed din BSD. În ziua de azi, facilitatea elimină scripturile ed, de exemplu
sed -i 's/abc/def/' file
poate fi folosită în loc de
ed file 1,$ s/abc/def/ w q
Notă: sed -i suprascrie fișierul original
Super-sed este o versiune extinsă a sed, care include suport pentru expresii regulate în formatul definit în Perl.
O altă variantă de sed este minised. Aceasta este precursoare versiunii GNU sed. Are avantajul că este foarte rapidă și consumă puțină memorie, fiind astfel ideală pentru sistemele embedded.
Următorul exemplu arată o utilizare tipică a sed, opțiunea -e indică faptul că urmează o expresie sed:
sed -e 's/textvechi/textnou/g' NumeFișierIntrare > NumeFișierIesire
s de la începutul expresiei înseamnă substituție, g de la sfârșit înseamnă global ceea ce înseamnă că toate aparițiile textvechi din linie vor fi înlocuite cu textnou
În afară de substituții mai sunt posibile și alte modalități de procesare. Următorul exemplu șterge liniile goale sau liniile care conțin doar spatii:
sed -e '/^ *$/d' NumeFișierIntrare
În UNIX, sed este folosit adeseori ca un filtru în succesiunea de comenzi:
generate_data | sed -e 's/x/y/g'
Exemplu de mai sus substituie literele x cu y în datele generate de programul generate_data.
Mai multe substituții sau comenzi pot fi puse împreună într-un fișiere, de exemplu subs.sed, și executate împreună folosind opțiunea -f
sed -f subst.sed NumeFișierIntrare > NumeFișierIeșire
Unix (mai multe) | Programe în linia de comandă pentru|||
Management de fișiere: | cat | cd | chmod | chown | chgrp | cksum | cmp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch | ||
Management de procese: | at | chroot | cron | exit | kill | killall | nice | pgrep | pidof | pkill | ps | pstree | sleep | time | top | wait | ||
Management utilizator/mediu: | env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write | ||
Procesare text: | awk | comm | cut | ed | ex | fmt | head | iconv | join | less | more | paste | sed | sort | tac | tail | tr | uniq | wc | xargs | ||
Programare Shell: | basename | echo | expr | false | printf | test | true | unset | Imprimare: lp | |
Communicații: inetd | netstat | ping | rlogin | traceroute |
Căutare: find | grep | strings |
Diverse: banner | bc | cal | dd | man | size | yes |