Sed stream editor, introduktion

Af Lars Sommer, [email protected]
2005-04-20

Sed er en stream editor, som skanner input for mønstre, og behandler tekst jf.
givne kommandoer.
Sed er velegnet til at udføre editorarbejde der skal gentages.

Sed er avanceret, og har mange funktioner. Jeg vil kun berøre nogle enkelte,
som en introduktion.
For mere information, skriv “man sed” og/eller google sed.

Sed-kommandoer kan både samles i sed-scripts, og bruges direkte på
kommandolinjen.
For at bruge et sedscript, skrives:
sed -f sedscript filderskalbehandles

For at bruge sed-kommandoer på kommandolinjen, skrives:
sed ‘kommando’ filderskalbehandles

Substituere (erstatte):
En ting folk bruger sed meget til, er tekstsubstitution (søg og erstat).
Syntaksen er:
/s/expr/string/
Hvor expr er den expression der skal søges efter, og erstattes med string.
Her erstatter vi første forkomst af ordet “nisse” i hver linje af en fil,
med ordet “trold”:
sed ‘s/nisse/trold/’ eventyr.txt

Læg mærke til det kun er FOERSTE forekomst af ordet paa hver linje, og ikke
alle forekomster.
Hvis vi vil have den til at erstatte det hele, bruges a i stedet for s,
og et g saettes paa i enden:
sed ‘a/nisse/trold/g’ eventyr.txt

Hvis man vil fjerne alle forekomster af ordet ondskab fra filen foelelser.txt,
kan man bruge:
sed ‘a/ondskab//g’ foelelser.txt

Ofte vil folk gerne søge og erstatte i en fil, og derefter gemme resultatet
i samme fil.
Man kunne fristes til at tro at:
sed ‘s/ludo/skak/’ spil.txt > spil.txt
ville virke, men NEJ! Saa ender du bare med en tom fil.
Du er noedt til at lave en midlertidig fil:
sed ‘s/ludo/skak/’ spil.txt > spil.txt.tmp && mv spil.txt.tmp spil.txt

Slette tekst med sed:
Hvis vi vil fjerne alle linjer der indeholder root fra /etc/passwd:
sed ‘/root/d’ /etc/passwd
Hvis vi kun vil slette ord, kan vi sætte \< > omkring vores expr:
sed ‘/\<root>/d’ /etc/passwd

Indsaette indholdet af filer:
Hvis vi vil tilfoeje indholdet af filen fodnote.txt nederst i filen tekst.txt:
sed ‘$r fodnote.txt’ tekst.txt

Flere sed-kommandoer paa een kommandolinje:
Hvis vi har en fil, hvor vi vil have < > omkring alle linjerne, kan vi bruge:
sed -e ‘s/^/\</’ -e ‘s/$/>/’ filnavn
Hver sed-kommando har vi som altid pakket ind i ”, og sat -e foran,i
for at adskille de enkelte kommandoer.
De to tegn, ^ og $, betyder hhv. linjestart og linjeslut.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *