Wprowadzenie do Linuxa

15 Edytor strumieniowy sed

sed

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