Comanda Linux „sed” înseamnă editor de flux. Este folosit pentru a edita fluxuri (fișiere) folosind expresii regulate. Dar această editare nu este permanentă. Rămâne doar în afișare, dar în realitate, conținutul fișierului rămâne același.
În primul rând, este folosit pentru înlocuirea textului; în plus, poate fi folosit pentru alte operațiuni de manipulare a textului, cum ar fi inserarea, ștergerea, căutarea și multe altele. Comanda sed ne permite să edităm fișiere fără a le deschide. Suportul pentru expresia regulată îl face un instrument mai puternic de manipulare a textului.
model de design singleton java
Prezentare generală a comenzii sed
Este un utilitar Unix care transformă și analizează textul cu un limbaj de programare compact și simplu. A fost integrat din 1973 până în 1974 de Lee E. McMahon de la Bell Labs și este prezent astăzi pentru aproape fiecare sistem de operare. Comanda sed s-a bazat pe aspectele de scriptare ale qed (editor rapid) anterior și ale editorului interactiv ed. A fost cel mai vechi instrument pentru suportul expresiilor regulate și rămâne activ pentru procesarea textului, cel mai important cu comanda de înlocuire. Instrumentele alternative celebre includ Perl și AWK pentru „editare flux” și manipularea șirurilor de text simplu.
Modul de operare al comenzii sed
Comanda sed este un utilitar de procesare a textului orientat pe linie: linie cu linie citește textul dintr-un fișier sau dintr-un flux de intrare într-un buffer intern cunoscut sub numele de spațiu de model. Toate citirile de rând încep un ciclu. Comanda sed folosește una sau mai multe operații care au fost descrise de un script sed în spațiul de model. Acesta operează un limbaj de programare folosind aproximativ 25 de comenzi care descriu operațiunile peste text.
Pentru toate liniile de intrare, comanda sed are ca rezultat, de obicei, spațiul de tipar și începe ciclul cu următoarea linie din nou după executarea scriptului. Alte naturi de sfârșit de script sunt disponibile din comenzile de script și opțiunile de setare, de exemplu, N pentru a include imediat următoarea linie în spațiul de model, q pentru a ieși, d pentru a elimina spațiul de model și așa mai departe. Prin urmare, un script sed se referă la un corp de buclă care iterează dintr-un streamline, în care variabila buclă și bucla în sine sunt menținute și implicite de sed.
- Un script sed poate fi fie descris pe linia de comandă, fie citit printr-un fișier izolat. În scriptul sed, comenzile pot lua o adresă suplimentară în contextul expresiilor regulate sau al numerelor de rând. Adresa decide când este executată comanda. De exemplu, 2d va executa comanda d (sau șterge) doar pe a doua linie de intrare, în timp ce /^ /d va elimina fiecare linie care începe cu un spațiu.
- Spațiul de reținere, un buffer special izolat, poate fi folosit de unele comenzi sed pentru a păstra un text acumulat între cicluri. Limbajul de comandă al sed are doar două variabile (spațiu de model și spațiu de păstrare) și funcționalitate de ramificare asemănătoare GOTO. Cu toate acestea, limbajul este Turing-complet. Scripturile ezoterice sed sunt disponibile pentru mai multe jocuri precum tetris, șah, arkanoid și sokoban.
- Bucla principală rulează pentru toate liniile fluxului de intrare, verificând scriptul sed pe toate liniile de intrare. Liniile de script sed sunt toate o pereche model-acțiune, reprezentând ce model pentru potrivire și ce acțiune să implementeze, care poate fi copiat ca o instrucțiune condiționată. Acțiunile implicite (tipăriți spațiul de tipar, copiați linia în spațiul de model), fluxurile de intrare și ieșire și variabilele de lucru (spațiu de păstrare și spațiu de model) sunt implicite; este posibil să se specifice programe concise cu o singură linie din cauza buclei principale.
Utilizarea comenzii sed
- Indicatorul de caractere (^) este același cu începutul liniei.
- Simbolul dolarului ($) este același cu completarea liniei.
- Asteriscul (*) este același cu apariția anterioară a caracterului mai mult sau zero.
- Simbolul plus (+) este același cu unul sau mai multe apariții anterioare de caractere.
- Semnul întrebării (?) este același cu apariția anterioară a caracterului mai mult sau zero.
- Simbolul punct (.) este exact același cu un caracter.
Exemplul de mai jos reprezintă cea mai mare comandă și utilizarea tipică a comenzii sed, adică înlocuirea. Utilizarea a fost motivația reală pentru comanda sed:
sed 's/regexp/replacement/g' inputFileName > outputFileName
Sunt posibile și alte moduri de procesare simplă cu aproximativ 25 de comenzi sed. De exemplu, mai jos folosește opțiunea d pentru a filtra liniile care includ doar spații și sfârșitul caracterului de linie:
sed '/^ *$/d' inputFileName
Exemplul de mai sus folosește câteva dintre metacaracterele expresiei regulate de mai jos:
Adesea, comanda sed este folosită ca filtru în interiorul unei conducte sub Unix:
$generateData | sed 's/x/y/g'
Programul generateData generează date, iar comanda sed face o mică schimbare prin înlocuirea lui x în locul lui y.
Adesea, este util să puneți mai multe comenzi sed, o singură comandă pe fiecare linie, în interiorul unui fișier script și să utilizați indicatorul -f pentru a executa comenzile din fișier:
sed -f subst.sed inputFileName > outputFileName
Sintaxă:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
Opțiuni:
Următoarele sunt câteva opțiuni de linie de comandă ale comenzii sed:
-n, --liniștit, --tăcut: Ne permite cu forță să tipărim spațiul de tipar.
-e script, --expression=script: Este folosit pentru a adăuga script-ul la comenzile care urmează să fie executate.
-f fișier-script, --file=fișier-script: Este folosit pentru a adăuga conținutul fișierului script la comenzile care urmează să fie executate.
--follow-symlinks: este folosit pentru a urmări legăturile simbolice atunci când se procesează pe loc.
-i[SUFIX], --in-place[=SUFIX]: este folosit pentru a edita fișiere în loc (creează o copie de rezervă dacă este furnizată opțiunea SUFFIX).
-l N, --lungimea liniei=N: Este folosit pentru a specifica lungimea dorită de înfăşurare a liniei pentru comanda `l'.
--posix: este folosit pentru a dezactiva toate extensiile GNU.
-E, -r, --regexp-extended: Ne permite să folosim expresiile regulate extinse în script (pentru portabilitate utilizați POSIX -E).
-s, --separate: este folosit pentru a considera fișierele ca fiind separate și nu ca un singur și continuă fluxul lung.
--cutie cu nisip: Este folosit pentru a funcționa în modul sandbox.
-u, --unbuffered: Este folosit pentru a încărca cantitățile minime de date din fișierele de intrare și șterge mai des tamponurile de ieșire.
-z, --null-data: Este folosit pentru a separa linii prin caractere NUL.
--Ajutor: este folosit pentru a afișa manualul de ajutor.
--versiune: Este folosit pentru a afișa informații despre versiune.
Exemple de comanda sed
Să vedem următoarele exemple:
turnat în sql
- Se aplică în directorul STDIN
- Înlocuire globală
- Eliminarea unei linii
- Folosind comanda Multiple sed
- Citirea comenzilor dintr-un fișier
- Înlocuirea personajelor
- Limitarea sedului
- Inserarea și adăugarea textului
- Modificarea liniilor
- Transformarea Personajelor
- Imprimarea numerelor de linie
Se aplică în directorul STDIN
Comanda sed nu se limitează doar la manipularea fișierelor; de asemenea, îl putem aplica în directorul STDIN.
echo class7 | sed 's/class/jtp/' echo class7 | sed 's/7/10/' cat msg.txt | sed 's/learn/study/'
Comenzile de mai sus vor înlocui primul text cu al doilea model de text. Luați în considerare rezultatul de mai jos:
Din rezultatul de mai sus, mai întâi, am executat comanda „sed” pe un șir „class7” unde „class” este schimbat în „jtp” și 7 în 10. Apoi am executat comanda „sed” pe un flux „msg.txt”. unde „învățați” este convertit în „studiați”.
Înlocuire globală
În exemplul anterior, toate cuvintele „învățați” nu au fost modificate în „studiați”. Pentru a edita fiecare cuvânt, trebuie să folosim un înlocuitor global „g”. Acesta va edita toate cuvintele specificate într-un fișier sau șir.
Sintaxă:
command | sed 's///g'
Luați în considerare exemplele de mai jos:
echo class7 class9 | sed 's/class/jtp/g' cat msg.txt | sed 's/learn/study/g'
Comenzile de mai sus vor înlocui tot modelul de text specificat. Luați în considerare rezultatul de mai jos:
Din rezultatul de mai sus, executând comanda „echo class7 class9 | sed 's/class/jtp/g'' toată 'clasa' este convertită în 'jtp' şi cu comanda 'cat msg.txt | sed „s/learn/study/g” tot „learn” a fost convertit în „study”.
Eliminarea unei linii
Opțiunea „d” ne va permite să eliminăm o linie completă dintr-un fișier. Trebuie doar să specificăm un cuvânt din acea linie cu opțiunea „d”, iar linia respectivă va fi ștearsă. Dar, rețineți că toate liniile care au același cuvânt vor fi șterse. Se va executa astfel:
cat | sed '//d'
Luați în considerare comanda de mai jos:
cat msg.txt | sed '/jtp/d'
Comanda de mai sus va șterge liniile care au cuvântul „jtp”. Luați în considerare rezultatul de mai jos:
Din rezultatul de mai sus, executând comanda „cat msg.txt | sed '/jtp/d'' toate liniile care conțin cuvântul 'jtp' sunt șterse.
Folosind comanda Multiple sed
Opțiunea „-e” ne permite să executăm mai multe comenzi sed simultan. Putem efectua mai mult de o operație sed executând comanda ca:
sed -e ' ; '
Luați în considerare comanda de mai jos:
sed -e 's/red/blue/; s/yellow/black/' exm.txt
Comanda de mai sus va aplica toate operațiunile specificate în fișierul „exm.txt”. Luați în considerare rezultatul de mai jos:
După cum putem vedea din rezultatul de mai sus, toate cuvintele „roșii” sunt înlocuite cu „albastru”, iar toate cuvintele „galbene” sunt înlocuite cu „negru”. De asemenea, putem separa comenzi astfel:
sed -e ' >s/red/blue/; >s/yellow/black/' exm.txt
Rezultatul va fi același cu comanda de mai sus.
șir de convertor până în prezent
Citirea comenzilor dintr-un fișier
Putem salva comenzile sed într-un fișier și le putem aplica deodată în orice fișier. Se poate face prin specificarea opțiunii '-f' după cum urmează:
sed -f
Din comanda de mai sus, „” este un fișier care are o listă de comenzi sed. Luați în considerare comanda de mai jos:
sed -f SedCommands exm.txt
Comanda de mai sus va aplica toate comenzile specificate în fișierul „SedCommand” de pe „exm.txt”. Luați în considerare rezultatul de mai jos:
Din rezultatul de mai sus, am folosit comenzi aplicate exemplului anterior. Deci, rezultatul este același ca exemplul anterior.
anulați ultima comitere
Înlocuirea personajelor
Putem folosi semnul exclamării (!) ca delimitator de șir. De exemplu, vrem să înlocuim shell-ul bash și să-l înlocuim cu shell-ul csh în „/etc/passwd”. Pentru a face acest lucru, executați comanda de mai jos:
sed 's//bin/bash//bin/csh/' /etc/passwd
Putem obține același rezultat executând comanda de mai jos:
sed 's!/bin/bash!/bin/csh!' /etc/passwd
Limitarea sedului
Utilizarea de bază a comenzii sed procesează întregul fișier. Dar, putem limita comanda sed și specifica orice linie. Există două moduri de a limita comanda sed:
- O serie de linii.
- Un model care se potrivește cu o anumită linie.
Putem furniza un număr pentru a specifica o linie după cum urmează:
sed '3s/Red/Blue/' exm.txt
Comanda de mai sus va aplica operația specificată pe a treia linie. Luați în considerare rezultatul de mai jos:
Din rezultatul de mai sus, doar linia trei este modificată.
De asemenea, putem specifica o serie de linii. Pentru a specifica un interval de linii, executați comanda după cum urmează:
sed '1,3s/Red/Blue/' exm.txt
Comanda de mai sus va actualiza textul specificat în rândurile 1 și 3. Luați în considerare rezultatul de mai jos:
Inserarea și adăugarea textului
Steagul „i” și „a” este folosit pentru a insera și adăuga textul într-un fișier. Steagul „i” va adăuga textul înaintea șirului, iar steagul „a” este folosit pentru a adăuga text după șir. Luați în considerare comanda de mai jos:
echo 'Another Demo' | sed 'iFirst Demo'
Comanda de mai sus va insera textul înainte de textul „O altă demonstrație”. Luați în considerare rezultatul de mai jos:
Pentru a adăuga text, executați comanda după cum urmează:
ex de nume de utilizator
echo 'Another Demo' | sed 'aFirst Demo'
Comanda de mai sus va adăuga textul. Luați în considerare rezultatul de mai jos:
Modificarea liniilor
Steagul „c” este folosit pentru a modifica o anumită linie. Pentru a modifica o linie, executați comanda după cum urmează:
sed '3cThis is a modified line.' exm.txt
Comanda de mai sus va actualiza linia trei. Luați în considerare rezultatul de mai jos:
De asemenea, putem folosi o expresie regulată pentru a actualiza mai multe linii care au același model. Luați în considerare comanda de mai jos:
sed '/Apple is /c Line updated.' exm.txt
Comanda de mai sus va actualiza toate liniile care au șirul „Apple is”. Luați în considerare rezultatul de mai jos:
Transformarea Personajelor
Steagul „y” este folosit pentru a transforma caracterele. Transformarea personajelor nu poate fi limitată la anumite apariții. Pentru a transforma caractere, executați comanda după cum urmează:
sed 'y/abc/def/' exm.txt
Comanda de mai sus va transforma caracterele „a”, „b”, „c” în „d”, „e”, „f”. luați în considerare rezultatul de mai jos:
Imprimarea numerelor de linie
Semnul „=” este folosit pentru a tipări numărul liniei. Pentru a imprima numărul liniei, executați comanda după cum urmează:
sed '=' exm.txt
Comanda de mai sus va afișa numărul de linie al conținutului fișierului. Luați în considerare rezultatul de mai jos:
Semnul egal cu opțiunea „-n” specifică numărul liniei care conține un script care se potrivește. Luați în considerare rezultatul de mai jos:
sed -n '/mango/=' exm.txt
Comanda de mai sus va afișa numărul de linie care conține cuvântul „mango”. Luați în considerare rezultatul de mai jos:
Din rezultatul de mai sus, putem vedea că linia numărul 2 are cuvântul „mango”.