De syntaxis:
sed 's/zoekterm/vervangterm/' bestand
-Of-
cat bestand | sed 's/zoekterm/vervangterm/'
-Of-
echo "Dit is een test bericht" | sed 's/zoekterm/vervangterm/'
Zoek in het bestand test.txt naar het woord google en vervang dit woord door yahoo
sed 's/google/yahoo/' test.txt
Standaard wordt enkel het eerste voorkomen van het zoekwoord vervangen, wat als we alle zoekwoorden willen vervangen.
dany@linux-e1kr:~> echo "Sheena wil, Sheila krijgt" | sed 's/Sh/L/'
Leena wil, Leila krijgt
Om globaal (meerdere termen) te zoeken en te vervangen, gebruik je de g optie:
dany@linux-e1kr:~> echo "Sheena wil, Sheila krijgt" | sed 's/Sh/L/g'
Leena wil, Leila krijgt
Wat als het scheidingsteken in de zoek- of vervangterm voorkomt? Dan gebruiken we gewoon een ander scheidingsteken. Om de term /var/ftp/pub te vervangen door /opt/ftp/com gebruiken we als scheidingsteken _:
sed 's_/var/ftp/pup_/opt/ftp/com_' test.txt
Sed slaat de zoekterm op in een variabele met de naam &, waardoor je deze in de vervangterm kunt hergebruiken. We zoeken naar de term Surendra en vervangen die door Dhr. Surendra.
sed 's/Surendra/Dhr. &/' test.txt
Het volgende voorbeeld gebruikt reguliere expressies (complex, maar krachtig en stof voor een andere tip) waardoor sed enorm krachtig wordt. Om abc123suri om te vormen naar suriabc123, gebruik je:
echo "abc123suri" | sed 's/\([a-z]*\)\([0-9]*\)\([a-z]*\)/\3\1\2/'
Daarbij bevat \1 het resultaat (abc) van de eerste reguliere expressie ([a-z]*), \2 van de tweede reguliere expressie ([0-9]*), \3 van de derde reguliere expressie.
Sed geeft standaard alle regels weer. Soms wil je alleen de aangepaste regels zien. Daarvoor gebruiken we de -n optie om de uitvoer uit te schakelen en p om de aangepaste regels weer te geven. Voor de voorbeelden, maken we het volgende bestand aan:
dany@linux-e1kr:~>echo "surendra audi" > tem.txt
dany@linux-e1kr:~>echo "kumar nudi" >> tem.txt
dany@linux-e1kr:~>echo "mouni surendra" >> tem.txt
dany@linux-e1kr:~>echo "baby dudy" >> tem.tx
dany@linux-e1kr:~>cat tem.txt
surendra audi kumar nudi mouni surendra baby dudy
Het voorbeeld:
dany@linux-e1kr:~> cat tem.txt | sed 's/surendra/bca/'
bca audi
kumar nudi
mouni bca
baby dudy
Met -n (uitvoer onderdrukken) en p (gevonden patronen weergeven):
dany@linux-e1kr:~> cat tem.txt | sed -n 's/surendra/bca/p'
bca audi
mouni bca
Om een bestand aan te passen, gebruiken we de -i optie (insert). Gebruik de -i doordacht, er is namelijk geen manier om het originele bestand te herstellen.
dany@linux-e1kr:~>sed -i 's/surendra/bca/' tem.txt
dany@linux-e1kr:~>cat tem.txt
bca audi kumar nudi mouni bca baby dudy dany@linux-e1kr:~>sed -i 's/bca/surendra/' tem.txt
dany@linux-e1kr:~>cat tem.txt
surendra audi kumar nudi mouni surendra baby dudy
Met uitvoer redirection kunnen we hetzelfde bereiken:
dany@linux-e1kr:~>sed 's/surendra/bca/' < tem.txt > abc.txt
dany@linux-e1kr:~>cat abc.txt
bca audi kumar nudi mouni bca baby dudy
Om enkel de aanpassingen naar een bestand te schrijven:
dany@linux-e1kr:~>sed 's/surendra/bca/w abc.txt' tem.txt
bca audi kumar nudi mouni bca baby dudy dany@linux-e1kr:~>cat abc.txt
bca audi mouni bca
Om de derde regel te verwijderen:
dany@linux-e1kr:~> sed '3d' tem.txt
surendra audi
kumar nudi
baby dudy
Om de vierde regel in het bestand te verwijderen:
dany@linux-e1kr:~>sed -i '4d' tem.txt
dany@linux-e1kr:~>cat tem.txt
surendra audi kumar nudi mouni surendra
Soms moet je verschillende termen zoeken en vervangen. Daarvoor kan je een klassieke ketting van opdrachten gebruiken:
dany@linux-e1kr:~> cat tem.txt | sed 's/surendra/bca/' | sed 's/mouni/mca/' | sed 's/baby/bba/'
bca audi
kumar nudi
mca bca
Dit wordt met de -e optie:
dany@linux-e1kr:~> sed -e 's/surendra/bca/' -e 's/mouni/mca/' -e 's/baby/bba/' tem.txt
bca audi
kumar nudi
mca bca
En nog korter met:
dany@linux-e1kr:~> sed 's/surendra/bca/;s/mouni/mca/;s/baby/bba/' tem.txt
bca audi
kumar nudi
mca bca
Selecteren van regels met behulp van regelnummers. Om in de derde regel een term te vervangen:
dany@linux-e1kr:~> sed '3 s/surendra/bca/' tem.txt
surendra audi
kumar nudi
mouni bca
Om vanaf regel 1 tot en met regel 3 een term te vervangen:
dany@linux-e1kr:~> sed '1,3 s/surendra/bca/' tem.txt
bca audi
kumar nudi
mouni bca
Om van de tweede regel tot het einde van het bestand een term te vervangen:
dany@linux-e1kr:~> sed '2,$ s/surendra/bca/' tem.txt
surendra audi
kumar nudi
mouni bca
Met de N optie kan je twee regels combineren tot één regel met behoud van het nieuwe regel teken in de gecombineerde regel.
dany@linux-e1kr:~> sed 'N' tem.txt
surendra audi
kumar nudi
mouni surendra
De uitvoer verschilt niet van de inhoud van het bestand, als je het verschil wilt zien, moet je het nieuwe regel teken (\n) vervangen door een spatie:
dany@linux-e1kr:~>echo "baby dudy" >> tem.txt
dany@linux-e1kr:~>cat tem.txt
surendra audi kumar nudi mouni surendra baby dudy dany@linux-e1kr:~>sed 'N;s/\n/ /' tem.txt
surendra audi kumar nudi mouni surendra baby dudy
De regels met de = optie nummeren:
dany@linux-e1kr:~> sed = tem.txt
1
surendra audi
2
kumar nudi
3
mouni surendra
4
baby dudy
Door regels te combineren kunnen we de nummering gescheiden door een tab (\t) voor de regels plaatsen:
dany@linux-e1kr:~> sed = tem.txt | sed 'N;s/\n/\t/'
1 surendra audi
2 kumar nudi
3 mouni surendra
4 baby dudy
Sed kan in een regel met een bepaalde zoekterm een specifieke bewerking uitvoeren. Vervang het woord audi door xyz in alle regels waarin het woord surendra voorkomt:
dany@linux-e1kr:~> sed '/surendra/ s/audi/xyz/' tem.txt
surendra xyz
kumar nudi
mouni surendra
baby dudy
Vervang in de regels 1 tot en met de regel waarin het woord surendra voorkomt het woord audi door xyz:
dany@linux-e1kr:~> sed '1,/surendra/ s/audi/xyz/' tem.txt
surendra xyz
kumar nudi
mouni surendra
baby dudy
Vervang audi door xyz tussen de zoektermen surendra en mouni:
dany@linux-e1kr:~> sed '/surendra/,/mouni/ s/audi/xyz/' tem.txt
surendra xyz
kumar nudi
mouni surendra
baby dudy
Of vanaf de zoekterm surendra tot het einde:
dany@linux-e1kr:~> sed '/surendra/,$ s/audi/xyz/' tem.txt
surendra xyz
kumar nudi
mouni surendra
baby dudy
Deze operator werkt met de w, p en d opties. Deze operator zaait vlug verwarring die door het opdoen van praktische ervaringen verdwijnt. Geef alle regels weer die het woord surendra niet bevatten:
dany@linux-e1kr:~> sed -n '/surendra/ !p' tem.txt
kumar nudi
baby dudy
Verwijder alle regels uitgezonderd diegene die het woord surendra bevatten:
dany@linux-e1kr:~> sed '/surendra/ !d' tem.txt
surendra audi
mouni surendra
Verwijder alle regels, uitgezonderd de regels 1 tot en met 3:
dany@linux-e1kr:~> sed '1,3 !d' tem.txt
surendra audi
kumar nudi
mouni surendra
Deze optie is waardevol bij het schrijven van complexe sed scripts. Sed is namelijk zoals bash, awk en perl een script programmeertaal.
sed -f sedscript.sed
Daarbij bevat het bestand sedscript.sed sed opdrachten die moeten uitgevoerd worden.
Op het internet kan je verschillende voorbeelden van sed opdrachten terugvinden (van erbarmelijke tot en met professionele kwaliteit). Bezoek bijvoorbeeld de pagina Handige een-regelige scripts voor sed om nog wat meer praktische voorbeelden te bestuderen.