Sök och ersätt text med sed

Min första kontakt med kommandoradsverktyget sed (https://www.gnu.org/software/sed/) var när jag skulle ersätta vissa ord i en lång textfil på min server. sed är en stream editor som tydligen kan göra massor av smarta saker med textfiler, men än så länge har mitt behov enbart inskränkt sig till att söka efter och ersätta ord. Hur går man då tillväga?

Om man har en textfilen hello.txt med en eller flera förekomster av ordet ”Hej”, och man vill ersätta dessa förekomster med ”Goddag”, så gör man följande i sitt terminalfönster:

sed 's/hej/goddag/g' hello.txt > goddag.txt

där det inledande s:et står för ”substitute” och g:et står för ”global” (kan tydligen också utelämnas i det här sammanhanget). Nu kommer alla förekomster av ”hej” i filen hello.txt att bytas ut mot ”goddag”, och det nya innehållet skrivs till filen goddag.txt (innehållet i hello.txt är oförändrat). Om man inte önskar en ny fil, utan enbart vill ändra ursprungsfilen, så så används sed -ie och raden avslutas sedan efter ”hello.txt” (dock kan man inte ångra detta kommando efteråt om något skulle bli fel).

Om man av någon orsak skulle vilja byta ut ord oavsett skiftläge på respektive bokstav till ett ord med bokstäver med ett givet skiftläge lägger man till ett I i slutet:

sed 's/hej/Goddag/gI' hello.txt > goddag.txt

Då kommer alla skiftlägen av ”hej” (t ex ”HEJ” eller ”Hej”) att bytas ut mot ”Goddag”.

Man ska nog inte se detta kommando som ett substitut för att ändra ord i en text i en ordbehandlare, ärligt talat är det ju mycket lättare att söka och ersätta på olika sätt i t ex Word. Men har man t ex en databasfil med massor av webbadresser som ska ändras efter ett givet mönster på servern kan detta sätt vara en lösning.

Här finns (mycket) mer att läsa om sed.

Kommentera gärna!