Hur man använder sed i Linux

Sed är ett kraftfullt UNIX-program som modifierar textdataflöden utan att direkt ändra filer. Här lär du dig grunderna och hur du utför vanliga textmanipulationer.

Sed är ett enkelt UNIX-program som varken skapar eller redigerar filer. Det modifierar endast data som passerar genom dess ingång och visar de modifierade data på dess utgång. Här ger vi en kort översikt av UNIX-filosofin, går igenom grunderna i att använda sed, och visar exempel på hur man använder programmet för vardagliga uppgifter.

Grunderna i att använda Sed

Sed är ett program som kan läsa och modifiera textdataflöden. Detta innebär att, till skillnad från en vanlig textredigerare, ändrar sed inte direkt filer på din dator. Istället fungerar det mer som ett "filter" för inkommande data och låter dig omvandla den på det sätt du önskar.

För att komma igång med sed, skapa först en fil med minst fem rader text inuti. Se till att det finns ett "ny rad"-tecken mellan dina rader:

printf "hello\nmaketecheasier\nworld\nthis\nis\nwonderful\n" > hello.txt

Obs: medan denna guide använder en fleradig textfil för att demonstrera sed, kommer alla delkommandon i programmet också att fungera på text som kommit från UNIX-rör.

Det allmänna kommandot för sed ser ut så här:

sed [alternativ] '{script}' [textfil]

En av de mest grundläggande funktionerna i sed är n delkommandot. Det fungerar genom att läsa data från seds ingång och placera det i programmets "mönsterutrymme." Detta är en speciell buffert som håller alla inkommande texter innan sed gör några manipulationer av dem:

sed n hello.txt

En annan av seds grundläggande funktioner är p delkommandot. Likt n, läser det data som kommer in från seds ingång och placerar det i programmets mönsterutrymme. Det skriver även ut det uttryckligen på din terminals utgång.

Att använda p delkommandot kan vara förvirrande för nybörjare eftersom körning av det med vilken textingång som helst resulterar i att sed skriver ut sin utgång två gånger. Detta beror på att sed per default automatiskt skriver ut sitt mönsterutrymme oavsett om p är närvarande eller inte:

sed p hello.txt

För att inaktivera detta udda beteende, lägg till -n flaggan innan du kör dina sed delkommandon:

sed -n p hello.txt

Med grunderna avklarade kommer följande avsnitt att titta på olika sätt att använda sed för att manipulera textdata.

1. Välja och trimma textflöden

Förutom att skriva ut kan du också använda sed för att välja och trimma text från både dataflöden och filer. Det enklaste sättet att göra detta är att lägga till ett intervallvärde till p delkommandot.

Följande kommando använder seds intervalsyntax för att skriva ut den tredje till femte raden i din "hello.txt"-fil:

sed -n '3,5p' hello.txt

Du kan också använda p delkommandot för att skriva ut icke-intilliggande rader i din text. Till exempel, följande skriver ut den första och fjärde raden i "hello.txt" filen:

sed -n '1p; 4p' hello.txt

2. Ta bort text från en Sed-ström

Sed kan också ta bort data från vilket inkommande textflöde som helst. Detta är hjälpsamt om du vill antingen ta bort några rader text från en stor fil eller städa upp ett programs utgång för att bara visa den information du behöver.

För att göra detta, använd d delkommandot tillsammans med den specifika raden eller intervallet som du vill ta bort:

sed -n '2d; 5d; p' hello.txt

Liknande som att skriva ut textlinjer, fungerar d delkommandot med fleradsintervall. Till exempel, följande kommando kommer att ta bort de första fyra raderna från "hello.txt"-filen:

sed -n '1,4d; p' hello.txt

Förutom att matcha specifika radintervall kan du använda reguljära uttryck för att hitta texten som du vill ta bort. Att göra detta kommer att be sed att leta efter rader som innehåller ordet "world" och ta bort den:

sed -n '/world/ d; p' hello.txt

Du kan också behandla reguljära uttryck som ett intervall för din indatafil. Detta ger dig mer flexibilitet i att definiera dina val inom programmet:

sed -n '/world/,/wonderful/ d; p' hello.txt

3. Lägga till ny text till en Sed-ström

Förutom att ta bort text kan sed också lägga till ny text till befintliga dataflöden. Även om det inte är på nivån av en fullfjädrad textredigerare, kan denna funktion fortfarande vara användbar för engångsredigeringar och grundläggande texttillägg.

För att lägga till en ny rad med text, kör sed med a kommandot följt av den text som du vill lägga till:

sed -ne '$a hello' -e 'p'
hello.txt

Obs: flaggan -e talar om för sed att den citerade strängen efter den är ett sed-uttryck. Detta gör att du kan kedja flera uttryck utan att anropa sed flera gånger.

Det är också möjligt att inkludera hela filer i ett sed-textflöde. För att göra det, använd r kommandot följt av namnet på filen som du vill lägga till:

sed -ne '$r welcome.txt' -e 'p' hello.txt

4. Hitta och Ersätt Text i Sed

En av de mest kraftfulla funktionerna i sed är dess förmåga att hitta och ersätta text från ett textflöde. Till skillnad från att lägga till och ta bort text, gör detta att du kan dynamiskt redigera data när det passerar genom UNIX-rör, vilket gör det mycket mer flexibelt jämfört med en vanlig textredigerare.

Börja med att skriva ut textingången utan några modifieringar från sed:

sed -ne 'p' hello.txt

Ersätt p subkommandot med s, lägg sedan till tre bakåtsnedstreck (/) efter det:

sed -ne 's///' -e 'p' hello.txt

Infoga ett strukturellt reguljärt uttryck av teckensnöret som du vill matcha mellan det första och andra bakåtsnedstrecket. Till exempel kan jag lägga in följande värde för att leta efter ord som börjar med "wo" i min ingångssträng:

sed -ne 's/wo*.//' -e 'p' hello.txt

Placera textmarkören mellan det andra och tredje bakåtsnedstrecket och ange texten som du vill ersätta dina träffar med. I kontrast till den föregående kolumnen använder denna sektion inte strukturella reguljära uttryck:

sed -ne 's/wo.*/website/' -e 'p' hello.txt

Som standard ersätter sed endast den första strängen som den matchar på en viss rad. Detta kan vara ett problem om du vill ersätta varje instans av ett ord i ditt textflöde. För att fixa detta, lägg till g alternativet efter det tredje bakåtsnedstrecket av ditt uttryck:

sed -ne 's/wo.*/website/g' -e 'p' hello.txt

5. Kopiera Textdata till Hållutrymmet

Sed använder två buffertar för att lagra textdata: mönsterutrymmet och hållutrymmet. Det första fungerar som en tillfällig plats för din text när den går genom sed-uttryck. Under tiden fungerar det andra som ett urklipp där du kan lagra godtycklig textdata.

En fördel med detta tillvägagångssätt är att det gör att du kan "hålla kvar" vissa utdata utan att förlita dig på externa program. Detta kan vara användbart om du planerar att använda sed för att bearbeta fler steg av textmanipulationer.

För att börja använda hållutrymmen, se först till att du har en fil med minst några rader text inuti:

sed -ne 'p' hello.txt

Ersätt p subkommandot med h, och ange antingen ett radnummer eller ett regex-värde som sed kommer att matcha i din fil. Genom att göra detta kommer sed att ta den specifika raden text och kopiera den till sitt hållutrymme:

sed -ne '3h' hello.txt

Obs: datan i ett hållutrymme kvarstår inte över olika sed-kommandon.

Du kan också använda H subkommandot för att lagra flera rader text i ditt hållutrymme. Till exempel lagrar följande kommando den tredje och fjärde raden av min textfil och skriver ut den tillbaka till terminalen:

sed -ne '3,4H; $ {x; p}' hello.txt

6. Använda Etiketter för att Skapa Loopar i Sed

Även om sed inte är ett heltäckande programmeringsspråk är det fortfarande möjligt att skapa loopar inuti programmet. Detta är användbart om du behöver ett sed-uttryck som måste kontinuerligt gå över ett visst stycke textingång.

För att skapa en loop i sed måste du först göra en etikett för ditt sed-uttryck. För det, använd : subkommandot följt av etiketten som du vill använda för ditt uttryck.

sed -e ':x' hello.txt

Ge de matchande kriterierna för ditt sed-uttryck. I mitt fall vill jag att det ska gå till slutet av varje rad i min ingångstext:

sed -e ':x; $' hello.txt

Skriv in de sed-subkommandon som du vill köra varje gång sed hittar en match, och omge dem med klammerparenteser. Följande sammanfogar två intilliggande rader, ersätter nyckaraktären med ett mellanslag, och går tillbaka till början av uttrycket:

sed -e ':x; /$/ {N; s/\n/ /g; bx}' hello.txt

Du kan till och med utöka detta för att matcha nästan vilken typ av textingång som helst. Till exempel använder följande kommando seds utökade regex-funktion för att ta bort HTML-taggar från din ingångstext:

sed -re ':x; s/<[^>]*>//g; {N; bx}'

7. Att Göra Permanenta Förändringar i Sed

Precis som med alla andra UNIX-verktyg kan sed dra nytta av utdata-omdirigering och pipor. Detta ger dig möjlighet att sammanfoga sed med andra program, men det ger dig också chansen att göra dina ändringar permanenta.

Följande rad av kod skapar en ny “welcome.txt”-fil från utdata av mitt sed-kommando:

sed -ne '2p; 6p' hello.txt > hi.txt

Förutom utdata-omdirigering kan du också använda den inbyggda -i flaggan för att redigera din aktuella fil istället för att skicka utdata till din terminal. Till exempel, följande kommando tar bort alla radbrytningar från min textfil och sparar den:

sed -ie ':x; $; {N; s/\n/ /g; bx}' hello.txt

Om allt detta snack har väckt ditt intresse för Linux-kommandoraden kan du läsa vår tidigare artikel där vi pratar om några av de mest intressanta Bash-promptar som du kan använda idag.

Ratkaisee kysymyksesi

Hur fungerar sed i Linux?

Sed on tehokas tekstinkäsittelytyökalu Linuxissa, joka toimii seuraavasti:

    • -

Rivien lukeminen

    : Sed lukee tiedoston rivejä yksi kerrallaan ja lataa ne muistii.

  • Muokkaaminen: Se suorittaa määritellyt toimenpiteet kullekin riville, kuten korvaukset, poistot tai lisäykset.
  • Tulostus: Muokatut rivit palautetaan muistiin ja lopuksi tulostetaan terminaaliin. Sed on laajasti käytetty skriptauksen, automaation ja tekstin muokkauksen helpottamiseksi.

Vad är kommandot sed i Unix?

SED är en kraftfull textströmredigerare i Unix-system. Seuraavat kohdat kuvaavat sen keskeisiä toimintoja:

    • -

Etsi ja korvattu

    : Sed voi etsiä tiettyjä merkkijonoja tekstistä ja korvata ne halutuilla arvoilla.

  • Rivien lisääminen ja poistaminen: Mahdollistaa rivien lisäämisen tai poistamisen tekstifileistä.
  • Nopea ja tehokas: Sed voi tehdä muutoksia reaaliaikaisesti ilman tarvetta avata tiedostoa erikseen tekstieditorissa. Peruskomentoja voidaan käyttää helppojen esimerkkien avulla, mikä tekee sen oppimisesta yksinkertaista ja tehokasta.

När ska man använda sed?

'sed' kannattaa käyttää seuraavissa tilanteissa:

    • -

Moniriviset tekstit

    : Kun tarvitset korvata useita rivejä kerralla.

  • Säännölliset lausekkeet: Kun etsit ja korvaat tekstiä monimutkaisilla malleilla.
  • Suuremmat tiedostot: Kun käsiteltävät tiedot ovat laajoja ja vaativat tehokkuutta.
  • Ei-interaktiiviset ympäristöt: Kun skripti vaatii automaattista tekstin muokkausta ilman käyttäjän vuorovaikutusta. Yhteenvetona, vaikka 'sed':n liiallista käyttöä yksinkertaisissa korvauksissa tulisi välttää, se on erinomaisesti soveltuva työkalu monimutkaisempien tekstinkäsittelytehtävien suorittamiseen.

Nyt kun olet lukenut Hur man använder sed i Linux loppuun, kutsumme sinut tutustumaan lisää Linux-kategoriaan. Löydät sieltä muita mielenkiintoisia artikkeleita, jotka laajentavat tietojasi ja pitävät sinut ajan tasalla. Älä lopeta lukemista ja löytämistä!

Indeksi
  1. Grunderna i att använda Sed
  2. 1. Välja och trimma textflöden
  3. 2. Ta bort text från en Sed-ström
  4. 3. Lägga till ny text till en Sed-ström
  5. 4. Hitta och Ersätt Text i Sed
  6. 5. Kopiera Textdata till Hållutrymmet
  7. 6. Använda Etiketter för att Skapa Loopar i Sed
  8. 7. Att Göra Permanenta Förändringar i Sed
  9. Ratkaisee kysymyksesi
    1. Hur fungerar sed i Linux?
    2. Vad är kommandot sed i Unix?
    3. När ska man använda sed?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Go up