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.