|
|
Programmet sed
Kommando | | Exempel | | Beskrivning |
s=substitute | | sed '/foo/ s/hej/svej/g' a.txt | | Skriver ut a.txt med hej utbytt till svej på alla rader som innehåller strängen foo. |
d=delete | | sed '/foo/ d' a.txt | | Skriver ut a.txt utom de rader som innehåller foo. |
a=append | | sed '/foo/ a\ en liten rad' a.txt | | Skriver ut a.txt men lägger till en rad med texten "en liten rad" efter de rader som innehåller foo. |
i=insert | | sed '/foo/ i\ en liten rad' a.txt | | Skriver ut a.txt men lägger till en rad med texten "en liten rad" innan de rader som innehåller foo. |
c=change | | sed '/foo/ c\ en liten rad' a.txt | | Skriver ut a.txt men ersätter alla rader som innehåller foo med texten "en liten rad" . |
|
Namnet SED betyder stream editor. Programmet används till att förändra text från en fil. Man kan använda reguljära uttryck tillsammans med sed. Programmet arbetar med filer genom att tolka en rad i taget. Varje rad berabetas och skickas sedan till standard output. SED används framför allt när du har stora filer där varje rad är uppbyggd på samma sätt, och du vill utföra en förändring som påverkar alla rader i filen. SED tar olika kommandon som input, men det definitivt vanligaste är 's'. SED tar också oilka flaggor, nedan visas några exempel:
Flagga | | Betydelse | | Beskrivning |
sed -e 's/a/x/g' -e 's/b/y/g' a.txt | | expression | | Skriver ut a.txt med alla a utbytta mot x och alla b utbytta mot y. |
sed -f commands.txt a.txt | | file | | Skriver ut a.txt med alla substitutioner som listas i filen commands.txt. |
s=substitute
Kommandot s (=substitute) är det viktigaste kommandot du behöver kunna när du använder sed. Med detta kommando kan du göra följande:
- Ersätta en del av raden. Ex: 's/gammalt/nytt/'. Här kommer sed att leta efter texten "gammalt" och ersätta den texten med "nytt".
- Ta bort en del av raden. Ex: 's/gammalt//'. Här kommer sed att leta efter texten "gammalt" och ersätta den med ingenting, vilket betyder att den försvinner.
- Lägga till ny text i raden. Ex: 's/gammalt/jätte gammalt/'. Här kommer sed att leta efter texten "gammalt" och lägga till texten "jätte " före "gammalt" .
Ofta används reguljära uttryck för att matcha den text som ska ersättas/tas bort. Nedan följer några exempel:
Exempel | | Beskrivning |
sed 's/foo/x/' a.txt | | Skriver ut a.txt med den första förekomsten av foo på varje rad ersatt med x. |
sed 's/foo/x/g' a.txt | | Skriver ut a.txt med alla förekomster av foo ersatta med x. |
sed 's/foo//g' a.txt | | Skriver ut a.txt med alla förekomster av foo raderade. |
sed 's/^foo/x/' a.txt | | Skriver ut a.txt med alla rader som börjar på foo ersatta med x istället för foo. |
sed '/foo/ s/a/x/g' a.txt | | Skriver ut a.txt och ersätt a med x på alla rader som innehåller strängen foo. |
sed '1,10 s/a/x/g' a.txt | | Skriver ut a.txt och ersätt a med x på raderna 1 t.o.m. 10. |
Vi tänker oss att vi har en fil c.txt med följande innehåll:
[olle@dev1]$ cat c.txt
hej alla
glada
katter
|
Om jag t.ex. vill ersätta "le" med "xx" på alla ställen i filen c.txt skriver jag:
[olle@dev1]$ sed 's/le/xx/g' c.txt
hej alxx
gxxda
katter
|
OBS! sed ersätter bara första förekomsten av det sökta ordet om man inte använder ett g på slutet.
[olle@dev1]$ sed 's/a/x/' c.txt
hej xlla
glxda
kxtter
|
Här testar vi ett reguljärt uttryck:
[olle@dev1]$ sed 's/...a$/x/' c.txt
hej x
gx
katter
|
Vi ser att alla rader som slutar på a får sina sista 4 tecken ersatta med x.
Nu testar vi att lägga till ny text utan att radera något gammalt:
[olle@dev1]$ sed 's/^/xx/' c.txt
xxhej alla
xxglada
xxkatter
|
Varje rad fick texten "xx" adderade som första två tecken.
d=delete
Kommandot d (=delete) används för att ta bort hela rader. Det är inte så ofta som sed används till detta, istället används grep för att välja ut/ta bort enskilda rader ur en fil.
Exempel | | Beskrivning |
sed 'd' a.txt | | Skriver ut a.txt med alla raderna raderade d.v.s ingenting. |
sed '/foo/ d' a.txt | | Skriver ut a.txt utom de rader som innehåller foo. |
sed '1,10 d' a.txt | | Skriver ut a.txt utom raderna 1 t.o.m. 10. |
Vi tänker oss att vi har en fil c.txt med följande innehåll:
[olle@dev1]$ cat c.txt
hej alla
glada
katter
|
Här tar vi bort alla rader som innehåller "e":
[olle@dev1]$ sed '/e/ d' c.txt
glada
|
a=append
Med kommandot a (=append) lägger vi till nya rader efter de rader som uppfyller vårt sökkriterium.
Exempel | | Beskrivning |
sed 'ahej' a.txt | | Skriver ut a.txt med en extra rad innehållande texten hej efter varje rad. |
sed '/foo/ ahej' a.txt | | Skriver ut a.txt med en extra rad innehållande texten hej efter varje rad som innehåller foo. |
Vi tänker oss att vi har en fil c.txt med följande innehåll:
[olle@dev1]$ cat c.txt
hej alla
glada
katter
|
Vi lägger till en rad "xx" efter varje rad som innehåller "e":
[olle@dev1]$ sed '/e/ axx' c.txt
hej alla
xx
glada
katter
xx
|
i=insert
Kommandot i (=insert) fungerar som kommandot a, fast den nya raden adderas ovanför den matchade raden. Vi tänker oss att vi har en fil c.txt med följande innehåll:
[olle@dev1]$ cat c.txt
hej alla
glada
katter
|
Vi lägger nu till en rad "xx" före varje rad som innehåller "e":
[olle@dev1]$ sed '/e/ ixx' c.txt
xx
hej alla
glada
xx
katter
|
c=change
Kommandot c (=change) ersätter en hel rad med en given text. Vi tänker oss att vi har en fil c.txt med följande innehåll:
[olle@dev1]$ cat c.txt
hej alla
glada
katter
|
Vi ersätter nu alla rader som innehåller "e" med "xx":
[olle@dev1]$ sed '/e/ cxx' c.txt
xx
glada
xx
|
|
| |
|