Sed edytor strumieniowy,sed wczytuje bieżący wiersz pliku do wewnętrznego bufora celem manipulowania tekstem. Wynik jest wysyłany na standardowe wyjście. Oryginalny plik nie jest nigdy zmieniany. Jeżeli chcemy zapisać wyjście w pliku, należy przekierować standardowe wyjście na plik. Składnia: sed -opcje number,/regexp/action plik.txt Wyrażenia regularne: Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression). lub? kropka: odpowiada dowolnemu pojedynczemu znakowi z wyjątkiem znaku przedstawiającego koniec linii np. wyrażenie regularne b.l przedstawia zarówno słowo bal jak ból jak i każdą inną kombinacje typu bel, bil, bpl, [ ] pozwala dopasować dowolny znak ze zbioru zawartego między nawiasami, wszystkie znaki występujące między nawiasami mają zwykłe znaczenie oprócz myślnika, który jest używany do tworzenia zakresu znaków np. [a z] oznacza wszystkie litery od a do z czyli a każdą małą literę alfabetu. Znak ^, umiejscowiony na początku nawiasów [^ ] wyznacza negacje zbioru zdefiniowanego między nawiasami np. [^0 9] oznacza wszystkie znaki oprócz 0,1,2,3,4,5,6,7,8,9 * gwiazdka dopasowuje zero lub więcej wystąpień znaków poprzedzających *. Zwracamy uwagę, że gwiazdka w wyrażeniach regularnych ma inne znaczenie niż gwiazdka w generowaniu nazwy plików, w tym przypadku * oznacza dowolnie długi także pusty ciąg różnych znaków. W wyrażeniach regularnych dowolny ciąg dowolnych znaków zapisujemy jako.* ^ akcent w formie daszka wskazuje, że ciąg znaków występujący po nim znajduje się na początku linii. $ dolar jest przeciwieństwem ^ i wskazuje, że ciąg znaków, który go bezpośrednio poprzedza znajduje się na końcu wiersza Wyrażenie regularne i jego opis (przykłady) /./ Oznacza wiersz, który zawiera co najmniej jeden znak /../ Oznacza wiersz zawierający przynajmniej dwa znaki /^#/ Oznacza wiersz zaczynający sie od '#' /^$/ Oznacza wiersz pusty /}$/ Oznacza wiersz, który kończy się '}' (bez spacji) /} *$/ Oznacza wiersz kończący się '}' po której występuje zero lub więcej spacji /[abc]/ Oznacza wiersz zawierający 'a', 'b' lub 'c'
Przykłady działania edytora sed pokażemy segregując je według akcji 1. Akcja print polecenie p sed p plik.txt wypisuje na ekran zawartość pliku plik.txt. Każdy wiersz jest wypisany dwukrotnie ponieważ sed domyśle wysyła każdy wiersz na standardowe wyjście. Aby temu zapobiec dodaje się opcje n sed n p plik.txt wypisuje na ekran zawartość pliku plik.txt bez powtórzeń. Ale możemy również określać które z linijek należy poddać działaniu sed n 1p plik.txt wypisze na ekran ale tylko pierwsza linijkę sed n 10p plik.txt - wypisze na ekran ale tylko dziesiątą linijkę sed n 1,10p plik.txt wypisze na ekran linijki od pierwszej do dziesiątej sed n 5,$p plik.txt wypisze na ekran linijki od 5 do ostatniej w pliku Linijki które poddane są działaniu można określić również poprzez wyrażenia regularne sed n /^T/p plik.txt wypisze wszystkie linijki zaczynające się na literę T sed n /^[1-9]/p plik.txt wypisze wszystkie linijki nie zawierające cyfr Albo można to połączyć: sed n 1,/^T/p plik.txt wypisze wszystkie linijki od pierwszej do zaczynającej się na literę T Można połączyć dwa lub więcej poleceń sed używając opcji e sed n e 1p e 10p e 15p plik.txt wypisze na ekran linijkę 1, 10 oraz 15 Można to również zrobić za pomocą znaku ; sed n 1,3p;/^T/p plik.txt wypisze linijki od 1 do 3 oraz zaczynające się na literę 2. Akcja append a dodaje podane wyrażenie za wskazanymi wierszami sed 1aHello plik.txt - po pierwszym wierszu doda wiersz z Hello sed 1a Hello\ >to ja plik.txt symbol \ oznacza łamanie wiersza sed /^T/aHello plik.txt dodaje linijkę z Hello po każdym wystąpieniu linijki zaczynającej się na literę T 3. Akcja insert i dodaje podane wyrażenie przed wskazanym wierszem sed 1,3iHello plik.txt doda linijkę z Hello przed linijkami od 1 do 3 4. Akcja wstawiania pliku r wstawia zawartość pliku za podanym wierszem sed 1r plik2.txt plik.txt wstawia zawartość pliku2.txt za pierwszą linijką pliku plik.txt
5. Akcja delete d usuwa wskazane wiersze sed 3d plik.txt usunie wiersz 3 sed 3,6d plik.txt usunie wiersze od 3 do 6 sed /of/,$d plik.txt usunie wiersze od zawierającego of do ostatniego sed /AGH/,/END/d plik.txt usunie wszystkie wiersze od wiersza który zawiera łańcuch AGH do wiersza który zawiera łańcuch END 6. Akcja replace c zastępuję podanym tekstem wskazany wiersz sed 1,3cHello plik.txt zastępuję wiersze od 1 do 3 wierszem z tekstem Hello 7. Akcja find replace dla znaków y zamienia pojedyncze znaki każdy znak z pierwszego zestawu znaków zostaje zastąpiony odpowiednim znakiem z drugiego zestawu znaków sed y/a/b plik.txt zastępuje każde wystąpienie znaku a na znak b sed y/abc/def plik.txt zastępuję wystąpienie znaku a na d, b na e i c na f 8. Akcja find replace dla łańcuchów znakowych zamienia wystąpienie danego łańcucha znakowego innym łańcuchem znakowym sed s/agh/university/ plik.txt zastępuje każde wystąpienie ciągu znaków AGH na University ale tylko raz w każdej linijce sed s/agh/university/g plik.txt zastępuje każde wystąpienie ciągu znaków AGH na University, dodanie opcji g czyni tą zamianę globalną sed n s/agh/university/p plik.txt - to co powyżej ale tylko pasujące wiersze są wyprowadzane sed n 1,10s/AGH/University/g plik.txt - zastępuje każde wystąpienie ciągu znaków AGH na University ale tylko w linijkach od 1 do 10 sed n /^$/,/^END/s/AGH/University/g plik.txt -zastępuje każde wystąpienie ciągu znaków AGH na University ale tylko w bloku który zaczyna się wierszem pustym a kończy linijką zaczynającą się na END Do tej pory przyjrzeliśmy się prostym i w miarę złożonym podstawieniom, ale sed potrafi jeszcze więcej. Możemy odnosić się do dowolnej części lub całości tekstu odnalezionego przez wyrażenie regularne i użyć jej do stworzenia podstawianego napisu. Przykładowo, załóżmy że chcemy odpowiedzieć na wiadomość. Poniższa komenda poprzedzi każdą linię wyrażeniem "Stefan powiedział: ": sed s/.*/stefan powiedział: &/ pliki.txt znak & oznacza znaleziony wzorzec Ponadto mamy do dyspozycji Mamy do dyspozycji dziewięć rejestrów, w których możemy przechowywać wzorce. Należy odpowiednio oznaczyć (nawiasami \(...\)) wyrażenie, które chcemy zachować. Można odwołać się odpowiednio do dziewięciu wzorców w wierszu oznaczając je odpowiednio: \1 do \9. sed s/\(agh\)/x\1:x/g pliki.txt znalezione wyrażenie AGH zastępuję XAGHX
GREP - program (komenda wiersza poleceń), który służy do wyszukiwania w tekście i wyodrębniania linii zawierających ciąg znaków pasujący do podanego wyrażenia regularnego. SKŁADNIA grep [opcje] wzorzec plik/pliki OPCJE: -c - wyświetla liczbę linii z znalezionym wzorcem np. grep c [1-9] plik.txt wyświetla liczbę linii zawierających cyfry -v - wyświetla wszystkie linie nie zawierające wzorca -n - podaje numery wierszy w pliku źródłowym np. grep n Ala plik.txt -i - nie różnicuje działania wobec małych i dużych liter -e alternatywa wielu wzorców odpowiednik lub np. grep e ala e kot plik.txt -l - wyświetla nazwę tych plików w których znajduje się określony wzorzec np. grep l Ala katalog/* -L wyświetla nazwę tych plików w których nie znaleziono określonego wzorca -r gdy plik podany do przeszukania jest katalogiem, to zostaną przeszukane wszystkie pliki w tym katalogu FIND przeszukiwanie katalogów SKŁADNIA: find punkt_startu opcje kryterium ( name 'abc*' atime +n) akcja co robic ( ls) find./ maxdepth 1 name 'p*' mtime 1 ls mtime n podyfikowany dokladnie n*24 godziny temu mtime +n podyfikowany nie wcześniej niż 24 godz temu VI edytor tekstu vi <nazwa pliku> - otwiera plik w vi i przejście do trybu edycji esc wyjście z trybu insert :q wyjście (w trybie insert) :q! wyjście bez zapisu :w zapis do pliku o znanej nazwie :w <nazwa pliku> - zapis do pliku o podanej nazwie :wq wyjście z zapisem :f pokazuje nazwę edytowanego pliku :split <nazwa pliku> - otwiera równolegle drugi plik :vsplit <nazwa pliku> - j.w. ale dzieli ekran poziomo ctrl+ww przejście między oknami v przejście do trybu visiual (możliwość zaznaczania strzałkami) y kopiuje zaznaczony tekst
p wklejanie d usuwa zaznaczony tekst