Cum să utilizați Sed în Linux pentru sarcini Shell de bază

Sed Basics 00 Featured Image
⏱️ 15 min read

Sed este un program UNIX simplu. Nu creează și editează fișiere. Modifică doar datele care trec prin intrarea sa și prezintă datele modificate la ieșire. În ciuda acestui fapt, sed este considerat a fi unul dintre cele mai puternice utilitare UNIX pe care le veți întâlni în Linux, mai ales atunci când este combinat cu alte programe din sistemul dumneavoastră.

Acest articol își propune să învețe elementele de bază ale modului de utilizare a acestui program mic. În plus, va oferi, de asemenea, o scurtă prezentare generală a Filosofia UNIX și cât de importantă este această idee pentru a înțelege cum funcționează computerul.

Ce este filosofia UNIX?

Filosofia UNIX este ideea că un program ar trebui să facă doar o singură sarcină și să o facă bine. Vă încurajează să scrieți programe simple pe care le puteți reutiliza pentru diferite funcții în loc să creați programe complexe pe care nu le puteți reutiliza pentru alte sarcini.

Un bun exemplu în acest sens este programul cat. Acesta este un utilitar simplu care preia doar intrări și îl imprimă ca flux de text.

Bazele Sed 03 Eșantionul 2 pentru pisici

Filosofia UNIX vă permite să utilizați programul împreună cu alte utilitare din sistem. La rândul său, această abordare creează în cele din urmă o singură interfață pentru sistemul dvs. pe care o puteți învăța o dată și o puteți reutiliza în diferite contexte.

De exemplu, puteți alimenta un flux de pisici la un program precum grep. Acesta este un program simplu care face doar un singur lucru. Caută un șir de text într-o intrare și tipărește liniile în care apare acel text.

Sed Basics 04 Grep Pipe Sample

Pe de altă parte, puteți alimenta în schimb același flux de pisici la a paginator de ecran ca less. Acest lucru, la rândul său, vă va permite să defilați prin flux ca și cum ar fi un singur fișier text.

Sed Basics 05 Mai puține mostre de conducte

Cum funcționează Sed?

Acestea fiind spuse, sed este un program care citește un flux de text și îl modifică. Cu toate acestea, sed modifică doar fluxul de text, ceea ce înseamnă că nu schimbă direct fișierele din computer. Acest lucru poate fi confuz pentru un începător, deoarece orice modificare pe care o faceți în sed nu va apărea pe disc.

În ciuda acestui fapt, sed este încă un utilitar puternic. De exemplu, puteți rula următoarea linie pentru a citi rezultatul printf comanda:

printf "hello\nmaketecheasier\nworld\n" | sed n
Noțiuni de bază Sed 08 Comanda de citire Sed

Bazele utilizării Sed

Știind acest lucru, este incredibil de ușor să utilizați sed pentru sarcini de bază. Luați în considerare următorul exemplu:

sed -n p hello.txt
Noțiuni de bază Sed 09 Citiți fișierul

În aceasta, am folosit n comandă pentru a tipări conținutul fișierului „hello”.

1. Selectarea și tăierea fluxurilor de text

În plus, îi poți spune lui sed să modifice acest flux de text. De exemplu, puteți utiliza 2q comandă pentru a-i spune să imprime doar primele două rânduri ale fișierului „hello”:

sed 2q hello.txt
Noțiuni de bază Sed 10 Tipăriți primele rânduri 1

Acest lucru poate fi incredibil de util dacă doriți doar să obțineți primele câteva rânduri ale unui fișier text. Cu toate acestea, puteți utiliza și p comandă pentru a spune sedului să imprime doar o serie de linii dintr-un fișier.

sed -n 3,4p hello.txt
Noțiuni de bază Sed 11 Imprimați linii de mijloc

În exemplul de mai sus, am folosit sed pentru a tipări a treia și a patra linie a fișierului „hello”. De asemenea, puteți folosi același lucru p comandă pentru a imprima linii neadiacente în fișierul text. Luați în considerare următorul exemplu:

sed -n 1~4p hello.txt
Noțiuni de bază Sed 12 Imprimați linii non adiacente

Cu asta, îi spun lui sed să imprime doar prima și a patra linie a fișierului „bună ziua”. Acest lucru poate fi util dacă doriți să combinați mai multe linii din fluxuri diferite într-un singur fișier.

De exemplu, puteți utiliza sed cu > operator pentru a scrie fluxul modificat într-un fișier.

sed -n 1~4p hello.txt > welcome.txt
Noțiuni de bază Sed 13 Scrieți linii neadiacente în fișier

2. Eliminarea textului

O altă funcție excelentă a sed este aceea de a șterge textul dintr-un flux. Spre deosebire de tipărire, acest lucru vă permite să selectați liniile de text pe care doriți să le omite din flux.

De exemplu, am folosit d comandă pentru a șterge a doua și a cincea linie a fișierului hello.

sed 2~5d hello.txt
Noțiuni de bază Sed 14 Șterge linii

Un avantaj de a folosi acest lucru în loc de p comanda este că aceasta vă permite să eliminați doar linia pe care nu o doriți. Acest lucru este util dacă doriți fie să curățați un fișier mare, fie să tăiați o ieșire pentru a afișa doar informațiile de care aveți nevoie.

3. Adăugarea unui text nou

Cu asta, puteți folosi sed cu sine pentru a include date noi în fluxul dvs. de text. De exemplu, puteți utiliza a comandă pentru a adăuga o linie de text la fluxul curent:

sed -n 2p hello.txt | sed a\ "this is a new line"
Noțiuni de bază Sed 15 Adăugați linii

Mai mult, este, de asemenea, posibil să includeți fișiere întregi într-un flux de text. Pentru a face acest lucru, puteți utiliza r comandă care vă va permite să citiți un singur fișier în fluxul curent. Pentru a face acest lucru, puteți rula următoarea comandă pentru a include fișierul de bun venit după a doua linie de salut.

sed -n 2p hello.txt | sed rwelcome.txt
Noțiuni de bază Sed 16 Adăugați fișier la linie

4. Înlocuirea textului și manipularea fluxului

O utilizare genială a sed este modificarea fluxurilor existente. Acesta este momentul în care luați un flux de introducere a textului și utilizați funcțiile încorporate ale sedului pentru a modifica conținutul fluxului.

Aceasta este probabil cea mai puternică funcție a sedului. Deoarece acest lucru vă oferă posibilitatea de a edita dinamic datele pe măsură ce acestea trec prin conducte. De exemplu, puteți edita cu ușurință rezultatul unui program ca și cum ar fi un fișier text:

printf "hello\nmaketecheasier\nworld\n" | sed s/world/website/
Noțiuni de bază Sed 17 Modificați ieșirea comenzii

În acest exemplu, am folosit s comandă pentru a înlocui cuvântul „lume” cu „site”. Spre deosebire de comenzile anterioare, totuși, această comandă folosește o sintaxă specifică pentru a funcționa corect.

Știind că, forma generală a s comanda arată cam așa:

s/[regex]/(string)/{options}
  • Prima coloană indică faptul că aceasta este o comandă substitutivă. În cele mai multe cazuri, va trebui doar să utilizați s comandă pentru a modifica un flux de text.
  • A doua coloană indică cuvântul pe care doriți să îl înlocuiți folosind expresii regulate structurale. Acesta este un mod de a descrie cuvintele și gramatica folosind reguli generale. De exemplu, puteți descrie cuvintele „printuri”, „prinț” și „primer” prin scriere pri[n,m]...
  • A treia coloană descrie cuvântul pe care doriți să fie vechiul șir. Spre deosebire de coloana anterioară, această coloană nu folosește expresii regulate. În schimb, puteți folosi text simplu pentru a vă descrie noul cuvânt.
  • Ultima coloană îi spune lui sed să aplice orice opțiuni suplimentare de care aveți nevoie pentru o înlocuire. În acest sens, cel mai comun steag pe care ați dori să îl utilizați este g. Aceasta indică faptul că comanda va înlocui fiecare instanță a expresiei regex cu noul șir.

5. Utilizarea înlocuirii textului cu fișiere

Puteți aplica s comandă pentru a manipula orice tip de flux de text dorit. Acest lucru este util nu numai pentru că vă permite să modificați datele din mers, ci și pentru că puteți utiliza acest lucru cu aproape orice în linia de comandă Linux.

De exemplu, puteți utiliza s comandă cu un fișier text adăugând numele fișierului la sfârșitul comenzii:

sed s/hello/welcome/ hello.txt
Noțiuni de bază Sed 18 Modificați fișierul un singur cuvânt

În acest sens, îi spun lui sed să citească fișierul „bună ziua” și să înlocuiască prima instanță a cuvântului „bună ziua” cu „bun venit”. Apoi pot face acest lucru pentru fiecare instanță a cuvântului „bună ziua” din fișier, adăugând g opțiune:

sed s/hello/welcome/g hello.txt
Noțiuni de bază Sed 19 Modificați fișierul toate cuvintele

întrebări frecvente

Este posibil să scrieți modificări la un fișier folosind sed?

Da! Pe lângă utilizarea operatorilor de fișiere, este posibil să utilizați sed pentru a scrie direct orice flux de text modificat într-un fișier. Pentru a face acest lucru, puteți utiliza fie sed cu -i steag sau folosiți w comandă pentru a scrie fluxul într-un fișier.

Un lucru important de remarcat, totuși, este că aceste comenzi nu sunt conforme cu standardul POSIX. Aceasta înseamnă că acestea nu vor funcționa dacă utilizați o versiune non-GNU a sed.

Primesc o eroare „neterminată” ori de câte ori folosesc sed. Instalarea mea este stricata?

Deloc! Aceasta este o problemă care se întâmplă atunci când nu scrieți corect o comandă sed. Acest lucru este comun cu comenzile de înlocuire în care încercați fie să potriviți, fie să înlocuiți un șir cu spații.

De exemplu, rularea următoarei comenzi va duce la o eroare „neterminată”: sed s/hello/welcome back/g hello.txt.

Puteți remedia acest lucru adăugând caracterul de escape „\” înaintea spațiilor dvs. Acesta este un caracter special care îi spune lui sed să includă spațiul atunci când caută sau înlocuiește text.

Cu asta, versiunea corectă a comenzii de mai sus arată cam așa: sed s/hello/welcome\ back/g hello.txt.

În afară de „g”, există și alte steaguri pe care le pot folosi cu comanda „s”?

Da! In afara de gputeți folosi și p flag pentru a-i spune lui sed să afișeze orice linii modificate.

Un alt steag cu care poți folosi s este e. Acest lucru vă permite să rulați comenzi shell de fiecare dată când sed înlocuiește un cuvânt. De exemplu, puteți rula următoarea comandă pentru a rula touch de fiecare dată când găsește cuvântul „bună ziua” în fișier: sed s/hello\ /touch\ /e hello.txt.

În cele din urmă, puteți utiliza și i flag pentru a-i spune lui sed să nu țină seama de majuscule și minuscule atunci când caută potriviri. Acest lucru este util dacă doriți să potriviți același cuvânt, dar cu stiluri diferite. De exemplu, următoarea comandă va înlocui cuvântul „bună ziua” cu „bun venit”, indiferent de cazul său: sed s/HELLO/welcome/i hello.txt.

Dacă toată această discuție te-a făcut curios cu linia de comandă Linux. Puteți citi articolul nostru anterior, unde vorbim despre unele dintre cele mai multe mesaje Bash interesante pe care le puteți folosi astăzi.

Credit imagine: Unsplash

Join our Newsletter and receive offers and updates! ✅

0 0 votes
Article Rating
Avatar of Routech

Routech

Routech is a website that provides technology news, reviews and tips. It covers a wide range of topics including smartphones, laptops, tablets, gaming, gadgets, software, internet and more. The website is updated daily with new articles and videos, and also has a forum where users can discuss technology-related topics.

You may also like...

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x