Programmet sed är (bland annat) till för att automatisera textredigering. Det skapades genom en enkel bearbetning av editorn ed. Det läser in en text i form av indata eller från en fil, utför redigeringskommandon på en textrad i taget, och skriver sedan ut raden i sin nya form. Den ursprungliga filen ändras inte.
En av de redigeringar sed kan göra är substitutionen
''Byt söktext mot ersättningstext'';
det skrivs s/söktext/ersättningstext/.
Söktexten kan vara ett reguljärt mönster.
I stället för tecknet / kan man välja något annat
förutsatt att samma tecken används på alla tre ställen i kommandot.
Flaggan -e anger att nästa argument är ett kommando
till sed och inte ett filnamn.
Så här byter vi ut ''du'' mot ''DU'' i filen bellman:$ sed -e 's/du/DU/' bellman
Så lunka vi så småningom
från Bacchi buller och tumult,
när döden ropar: Granne, kom,
ditt timglas är nu fullt.
Du gubbe, fäll din krycka ner,
och DU, du yngling, lyd min lag:
den skönsta nymf, som åt dig ler,
inunder armen tag.
Tycker DU, att graven är för djup,
nå välan, så tag dig då en sup,
tag dig se'n dito en, dito två, dito tre,
så dör DU nöjdare.
$I utskriften har den första förekomsten av ''du'' på
varje rad bytts ut mot ''DU''.
Det är oftast nödvändigt att skydda redigeringskommandona med
apostrofer, så det är bra att göra det till en vana att alltid ha dem med.
Om alla förekomster
ska bytas ut, så ska man ange flaggan g i slutet
av substitutionskommandot:$ sed -e 's/[dD]u/DU/g' bellman
Så lunka vi så småningom
från Bacchi buller och tumult,
när döden ropar: Granne, kom,
ditt timglas är nu fullt.
DU gubbe, fäll din krycka ner,
och DU, DU yngling, lyd min lag:
den skönsta nymf, som åt dig ler,
inunder armen tag.
Tycker DU, att graven är för djup,
nå välan, så tag dig då en sup,
tag dig se'n dito en, dito två, dito tre,
så dör DU nöjdare.
$I stället för g kan man ange
ett nummer n, och då byts bara den n:te förekomsten
på varje rad ut.
Flaggan -n gör så att ingen rad automatiskt skrivs ut:$ sed -ne 's/[dD]u/DU/g' bellman
$Flaggan p i substitutionskommandot anger att de rader som
innehåller söktexten ska skrivas ut:$ sed -ne 's/[dD]u/DU/gp' bellman
DU gubbe, fäll din krycka ner,
och DU, DU yngling, lyd min lag:
Tycker DU, att graven är för djup,
så dör DU nöjdare.
$Tecknet & i ersättningstextentexten står för
det som matchas av söktexten.$ sed -ne 's/[dD]u/(&)/gp' bellman
(Du) gubbe, fäll din krycka ner,
och (du), (du) yngling, lyd min lag:
Tycker (du), att graven är för djup,
så dör (du) nöjdare.
$
Programmet åäö nedan ger ett typiskt exempel på hur sed används.
#!/bin/bash if [ $# -ne 1 ] ; then echo "Ange exakt ett argument" 1>&2 exit 1 fi if [ ! -f "$1" ] ; then echo "Filen $1 finns inte" 1>&2 exit 1 fi mv "$1" "$1.kopia" sed \ -e 's/å/\å/g' -e 's/ä/\ä/g' -e 's/ö/\ö/g' \ -e 's/Å/\å/g' -e 's/Ä/\Ä/g' -e 's/Ö/\Ö/g' \ "$1.kopia" > "$1"
Programmet tar ett argument, som ska vara
namnet på en fil.
Först kontrolleras det att antalet argument är 1.
Om inte, så avslutas programmet med ett näsvist
felmeddelande. Likaså avslutas programmet om argumentet
inte är namnet på en befintlig fil.
Filen kopieras sedan till en ny fil som
ges ett namn med ändelsen .kopia.
Sedan byts bokstäverna åäöÅÄÖ ut mot textsträngar
som motsvarar dem i språket HTML,
och resultatet sparas i en fil med samma namn som den
ursprungliga.
Lägg märke till att &-tecknen i ersättningstexten
måste skyddas.
Antag nu att det i katalogen /tmp
finns en HTML-fil:$ ls /tmp
test.html
$ cat /tmp/test.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>Test av åäö</title>
</head>
<body>
<h1>Test av åäö</h1>
Det här är en testfil för
mitt lilla program "åäö"!
</body>
</html>
$Låt oss köra programmet på filen:$ åäö /tmp/test.html
$ ls /tmp
test.html test.html.kopia
$ cat /tmp/test.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>Test av åäö</title>
</head>
<body>
<h1>Test av åäö</h1>
Det här är en testfil för
mitt lilla program "åäö"!
</body>
</html>
$Ett visst mått av felhantering finns i programmet:$ åäö bellmna
Filen bellmna finns inte
$ åäö bellman lenngren
Ange exakt ett argument
$