Edytor strumieniowy
Postać: sed [-n] [-e skrypt] [opcja]... [plik]...
Odczytuje kolejne linie ze strumienia wejściowego (lub pliku), dokonuje edycji zgodnie z podanym skryptem i wynik wyświetla na standardowym wyjściu.
Najważniejsze opcje:
-n hamuje normalne wyjście (wyświetlanie tylko linii wskazanych w skrypcie komendą p)
-e wykonają podany skrypt (pojedyncze polecenie). Jeśli podajemy tylko jedną komendę ta opcja nie jest wymagana.
Składnia skryptu:
[adres[,adres]] funkcja [argumenty]
adres
to numer linii pliku ($
oznacza numer ostatniej linii) lub wyrażenie regularne umieszczone pomiędzy znakami /
.
Określa on zakres linii strumienia na których będę dokonywane operacje.
Na przykład 1,3
pasuje do pierwszych trzech linii, /bash/
pasuje do wszystkich linii zawierających wyrażenie bash
,
zaś /begin/,/end/
dotyczy wszystkich kolejnych linii z których pierwsza zawiera słowo begin
a ostatnia słowo end
.
funkcja
do wyboru mamy wiele możliwości edycji strumienia. Najważniejsze to:
a tekst
dodaj podany tekst przed następną linią
c tekst
zamień linię podanym tekstem
d
usuń linię
i tekst
wstaw podany tekst
p
wyświetl bufor (aktualnie edytowaną linię)
s/wyrażenie/łańcuch/
zastępuje podanym łancuchem
pierwsze znalezione w buforze wyrażenie
s/wyrażenie/łańcuch/g
zastępuje podanym łancuchem
wszystkie znalezione w buforze wyrażenia
=
wyświetla numer linii
Przykłady:
$ sed -n ’1p’ plik
wyświetli pierwsza linię pliku
$ sed -n ’3,$p’ plik
wyświetli wszystkie linie od 3-ciej to końca pliku
$ sed ’3,$d’ plik
usunie wszystkie linie od 3-ciej do końca pliku
$ sed -n ’/Marek/p’ /etc/passwd
wyświetla linie zawierające słowo Marek
z pliku /etc/passwd
$ sed ’/UNIX/c Linux’ plik
Zamienia linie w których występuje słowo UNIX
zwrotem Linux
$ sed -n ’/UNIX/=’ plik
wyświetla numery linii w których występuje wyrażenie UNIX
$ sed ’s/UNIX/Linux/g plik
zamienia wszystkie wystąpienia słowa UNIX
na Linux
$ sed -n ’s/UNIX/Linux/g plik
tak jak wyżej ale wyświetlane są wyłącznie linie w których nastąpiła zmiana