sed står for s tream ed itor og er en almindeligt anvendt kommando i Linux / Unix. Navnet kommer fra en portmanteau af disse to ord. Det er ikke en teksteditor, selvom det ændrer tekst. I stedet modtager sed tekstindtastning som en "stream" og redigerer strømmen i overensstemmelse med dine instruktioner.

I det store og hele bruger folk sed som en kommandolinjeversion af finde og erstatte. Hovedkommandoen i programmet bruges til at erstatte en tegnstreng til en anden. Dette gør det nyttigt at køre find og erstatte funktioner på en batch af filer, men det er ikke så nemt at bruge som noget fra Notesblok eller Word. Du finder ud af, at syntaksen tager lidt vænne sig til, men når du har det nede, vil du se, hvor utrolig kraftig denne kompakte editor kan være.

Brug af sed til substitution

For at bruge sed skal du åbne et Terminal vindue. Kommandoen påberåbes med sed, men at skrive det alene vil ikke gøre noget. Du skal angive en af ​​kommandoerne samt nogle parametre.

Den mest almindelige parameter er erstatning, eller s . En enkel sed substitutionskommando ser noget ud som følgende:

 sed 's / cat / dog /' 

Denne kommando vil bestille sed til at scanne indgående tekst og erstatte hver forekomst af strengen "kat" med "hund". For at demonstrere bruger vi echo til at give sed noget at arbejde med.

 ekko kat katapult | sed 's / cat / dog /' 

Der er tre hoveddele til sed-kommandoen. For det første er der sed der starter programmet. Så er der s der starter substitutionskommandoen. Fremad skråstreg / er en separator. Strengen efter det vil være strengen sed leder efter. Strengen efter den anden skråstreg vil være de erstatningskarakterer, som sed skriver til strømmen. Den endelige skråstreg lukker kommandoen. Alt sammen er det 's/text-to-find/text-to-replace/' .

Bemærk de enkelte citater i det eksempel. De enkelte citater giver dig mulighed for at bruge meta tegn i din kommando. Mens citater ikke er væsentlige for de fleste af vores eksempler, bør du udvikle vanen med at bruge citater til alle kommandoer.

Hvad med delstrenger? Ovennævnte kommando vil arbejde på ethvert udseende af strengen "kat", selvom den er en del af et andet ord. For eksempel bliver "katapult" "dogapult" som "katamaran" bliver "dogamaran".

 ekkokatapult | sed 's / cat / dog /' 

Global erstatning

I vores første eksempel har du måske bemærket, at kun den første forekomst af den matchende streng blev erstattet. Som mange GNU-værktøjer er sed line-baseret. Som følge heraf opererer den kun på den første kamp inden for en linje. Hvis du har flere kampe til din kandidatstreng i linjen, vil kun den første blive ændret. For at gøre sed arbejde på hver forekomst af målstrengen, brug g flag i slutningen af ​​kommandoen:

 sed 's / cat / dog / g' 

Dette ville fungere som følgende eksempel:

 ekko kat katapult katamaran | sed 's / cat / dog / g' 

Uden det globale flag vil kun første forekomst af "kat" i hver linje blive erstattet.

Indstilling af input- og outputfiler

Som standard vil sed operere på standardindgang. Det er dog ikke for nyttigt. Hvis du vil køre sed på en fil, skal du angive filnavnet i slutningen af ​​kommandoen, som sådan:

 sed 's / cat / dog / g' oldfile.txt> newfile.txt 

Dette vil køre sed på "oldfile.txt" og gemme kommandoen output til "newfile.txt." Hvis "newfile.txt" ikke eksisterer, vil den blive oprettet af kommandoen. Hvis du ikke angiver en outputfil, vil sed ekko filens nye tekst til standardindgang.

Hvis du vil overskrive indholdet af en fil, skal du bruge -i flag. Dette flag gør redigeringerne "på plads."

 sed -i '' s / cat / dog 'oldfile.txt 

Denne kommando overskriver indholdet af målfilen med det samme, hvilket er lidt farligt. For at være på den sikre side kan du oprette en backup in situ.

For at lave en sikkerhedskopi af filen skal du sætte en udvidelse efter -i . Det behøver ikke at være en funktionel udvidelse: ".bu" eller ".bak" fungerer fint. Dette vil oprette en backup-fil med en udvidelse.

 sed -i.bak 's / cat / dog' oldfile.txt 

Dette skaber "oldfile.txt.bak", som indeholder de unedited tekstdata fra den originale version af "oldfile.txt."

Matcher regulære udtryk

Den virkelige kraft af sed kommer fra at matche regulære udtryk. Dette giver dig mulighed for at indstille mønstre til matchning, snarere end bogstaver. For eksempel kunne vi bruge noget som strengen nedenfor for at gentage et sæt af et eller flere tal:

 ekko "123 abc" | sed 's / [0-9] [0-9] * / & & /' 

Yderligere Læring

sed er et ekstremt kraftfuldt værktøj med en dybdekraft svarende til et script sprog. For at lære mere om sed's fulde evner, se Bruce Barnett's omfattende guide til sed.