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.