Resurs  

Introduktion till GNU sed

Behandlar: kommandot gsed.


 

Strömeditorn sed är ett Unix-verktyg för att editera rader i en fil. I det här dokumentet går vi igenom hur man använder sed för att utföra sök-och-ersätt i en textfil. Sökmönstret i sed kan skrivas som ett reguljärt uttryck.

Det finns flera olika varianter av kommandot sed på IDA:s datorsystem. Om man bara skriver kommandot sed i terminalfönstret används en version som bara hanterar en begränsad syntax för reguljära uttryck som kallas basala reguljära uttryck (BRU). För att kunna använda utökade reguljära uttryck (samma syntax som i t.ex. Python) måste man använda GNU versionen av sed, gsed, med flaggan -r:

gsed -r

Hur sed fungerar

Kommandot sed tar en operation och utför dem på varje rad i indatafilen (texten), samt skriver ut de editerade raderna på skärmen. Det som sker är att sed kör hela skriptet på en rad i taget:

Sed skriver alltså ut varje rad på skärmen, orginalfilen ändras inte. Om man vill kan man spara den editerade texten i en ny fil. Se exempel nedan.

Substitution

Det finns flera editeringsoperationer i sed, bland annat för att ta bort hela rader, stoppa in nya rader, byta plats på rader o.dyl. Vi ska dock bara koncentrera oss på substitueringsoperationen, som man använder när man vill ändra inuti i en rad. Själva substitueringskommandot har i sed följande uppbyggnad:

s/OLD/NEW/flaggor;       (semikolonet avslutar operationen)

Här är OLD egentligen ett reguljärt uttryck, så man kan skriva t.ex. [Cc]arl[sz]on om man vill få med både "Carlson", "carlson", "Carlzon" och "carlzon" på samma gång.

Det andra argumentet till 's' däremot (NEW) kan inte vara något reg.uttryck utan ska vara en vanlig sträng, dvs tecknen man skriver där är sig själva och har ingen annan betydelse. Så om man t.ex. vill göra stavningen av Karlsson enhetlig i ett dokument kan detta göras med följande s-operation:

s/[Cc]arl[sz]on/Karlsson/g; 

Efter det sista /-tecknet i substitutionsuttrycket kan man lägga in olika flaggor som modifierar substitutionen. I uttrycket ovan används flaggan 'g' som betyder att alla förekomster av på raden ska bytas ut mot NEW. Utan flaggan 'g' skulle bara den första matchningen på raden bytas ut.

Exempel:

Detta kommando byter ut alla förekomster av 'hej' i texten mot 'hej då'. Resultatet sparas i filen ny_textfil.txt.

gsed -r 's/hej/hej då/g' textfil.txt > ny_textfil.txt 

Detta kommando byter ut alla årtal (fyra siffror i rad) mot 'år ' och årtalet. \1 refererar till det som matchades i första parantesen i sökuttrycket.

gsed -r 's/([0-9]{4})/år \1/g' textfil.txt > ny_textfil.txt 

Detta kommando tar bort stora bokstäver i början av varje rad (byter ut mot ingenting).

gsed -r 's/^[A-ZÅÄÖ]//g' textfil.txt > ny_textfil.txt 

Att starta sed, flaggor

sed kan ges sökmönster på två sätt. Antingen direkt på kommandoraden:

gsed -r substitutionsuttryck  indatafil

eller genom att läsa substitutionsuttrycken från en fil. Flaggan -f används för att sed ska tolka första argumentet som en fil och läsa in substitutionsuttrycket från filen:

gsed -rf  mönsterfil  indatafil