sed står för s tream ed itor och är ett vanligt använt kommando i Linux / Unix. Namnet kommer från en portmanteau av dessa två ord. Det är inte en textredigerare, även om det ändrar text. Istället mottar sed textinmatning som en "ström" och redigerar strömmen enligt dina instruktioner.

I stort använder människor sed som en kommandoradsversion av hitta och ersätta. Huvudkommandot i programmet används för att ersätta en teckensträng för en annan. Det här gör det användbart att köra hitta och ersätta funktioner på en rad filer, men det är inte lika lätt att använda som något från anteckningsblock eller Word. Du kommer att upptäcka att syntaxen börjar bli van vid, men när du har det nere ser du hur otroligt kraftfull den här kompakta redaktören kan vara.

Användning av sed för substitution

För att använda sed måste du öppna ett terminalfönster. Kommandot är påkallat med sed, men att skriva det som ensam gör ingenting. Du måste ange en av kommandona, liksom vissa parametrar.

Den vanligaste parametern är ersättning, eller s . Ett enkelt sed substitutionskommando ser något ut som följande:

 sed s / katt / hund / ' 

Det kommandot kommer att beställa sed för att skanna inkommande text och ersätta varje förekomst av strängen "katt" med "hund". För att visa att vi använder echo att ge sed något att arbeta med.

 ekkokattkatapult | sed s / katt / hund / ' 

Det finns tre huvuddelar till sed-kommandot. För det första finns det sed som startar programmet. Då är det s som startar kommandot substitution. Framåt snedstreck / är en separator. Strängen efter det blir strängen sed söker. Strängen efter den andra snedstrecket kommer att vara de ersättningspersoner som sed skriver till strömmen. Det sista slashet stänger kommandot. Sammantaget är det 's/text-to-find/text-to-replace/' .

Notera de enkla citat i det exemplet. De enkla citaten låter dig använda metatyper i ditt kommando. Medan citat inte är nödvändigt för de flesta av våra exempel bör du utveckla vanan att använda citat för alla kommandon.

Vad sägs om partiella strängar? Ovanstående kommando kommer att fungera på varje utseende av strängen "katt", även om den är en del av ett annat ord. Till exempel blir "katapult" "dogapult" som "katamaran" blir "dogamaran".

 ekokatapult | sed s / katt / hund / ' 

Global ersättning

I vårt första exempel kanske du har märkt att endast den första instansen av matchande sträng har ersatts. Liksom många GNU-verktyg är sed linjebaserad. Som ett resultat verkar den endast på den första matchen inom en linje. Om du har flera matchningar för din kandidatsträng i raden kommer endast den första att ändras. För att göra sed arbete på varje förekomst av målsträngen, använd g flaggan i slutet av kommandot:

 sed s / katt / hund / g ' 

Detta skulle fungera som följande exempel:

 ekokat katapult katamaran | sed s / katt / hund / g ' 

Utan den globala flaggan skulle bara första kattens första instans i varje rad ersättas.

Inställning av inmatnings- och utdatafiler

Som vanligt används sed på standardinmatning. Det är dock inte så användbart. För att köra sed på en fil anger du filnamnet i slutet av kommandot, så här:

 sed / katt / hund / g 'oldfile.txt> newfile.txt 

Detta kommer att köra sed på "oldfile.txt" och spara kommandoens utdata till "newfile.txt." Om "newfile.txt" inte finns kommer det att skapas av kommandot. Om du inte anger en utdatafil kommer sed att echo filens nya text till standardinmatningen.

Om du vill skriva över innehållet i en fil måste du använda -i flaggan. Denna flagga gör ändringarna "på plats".

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

Det här kommandot skriver omedelbart innehållet i målfilen, vilket är lite farligt. För att stanna på den säkra sidan kan du skapa en säkerhetskopiering på plats.

För att skapa en säkerhetskopia av filen, lägg en anknytning efter -i . Det behöver inte vara en funktionell tillägg: ".bu" eller ".bak" fungerar bra. Detta skapar en säkerhetskopieringsfil med en filtillägg.

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

Detta skapar "oldfile.txt.bak", som innehåller de ofedda textdata från den ursprungliga versionen av "oldfile.txt."

Matchar reguljära uttryck

Den verkliga kraften i sed kommer från att matcha reguljära uttryck. Detta låter dig ställa in mönster för att matcha, snarare än bokstavliga strängar. Till exempel kan vi använda något som strängen nedan för att upprepa en uppsättning av ett eller flera nummer:

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

Ytterligare lärande

sed är ett extremt kraftfullt verktyg med ett kraftdjup som liknar ett skriptspråk. För att lära dig mer om Seds fulla kapacitet, kolla in Bruce Barnetts omfattande guide till sed.