Edytor strumieniowy sed

Podobne dokumenty
Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Wstęp do informatyki 2011/2012. Wyrażenia regularne (sed)

Wyrażenia regularne. Wyrażenia regularne 1/41

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Spis treści. I. Czym jest Indeks Haseł 3 II. Wyszukiwanie hasła 4. 1) Alfabetyczna lista haseł 4 2) Wyszukiwarka haseł 4 3) Grupy haseł 6

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Zakład Systemów Rozproszonych

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Ćwiczenie 8 Kolory i znaki specjalne

Prawa dostępu do plików (1)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

VII. Ciągi znaków łańcuchy

Instrukcja warunkowa i złoŝona.

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

vi - Visual edytor Wymagania.we: przerobione Pliki i kartoteki

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

11. PROFESJONALNE ZABEZPIECZENIE HASŁEM

EDYTOR TEKSTOWY VIM WYBRANE POLECENIA. Pracownia Informatyczna 5

Internet wyszukiwarki internetowe

Tematy lekcji informatyki klasa 4a luty/marzec 2013

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

II. Programowanie wsadowe DOS/Windows

pobieramy pierwszą literę komunikatu i wypełniamy nią (wszystkie pozycje tą samą literą) bufor słownikowy.

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

Języki formalne i automaty Ćwiczenia 6

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

Rys. 1. Dane umieszczone w oddzielnych zestawieniach

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Systemy operacyjne 12

MATERIAŁY - udostępnianie materiałów dydaktycznych w sieci SGH

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

1 Podstawy c++ w pigułce.

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

1. Wypisywanie danych

KaŜdy z formularzy naleŝy podpiąć do usługi. Nazwa usługi moŝe pokrywać się z nazwą formularza, nie jest to jednak konieczne.

Instrukcja instalacji i obsługi gotowych szablonów aukcji allegro oraz szablonów na zamówienie

2.6 Edytor sed (Stream Editor)

1. Kalkulator czterech działań. 2. Konwersja ciągu znaków do tablicy.

Instrukcja automatycznego tworzenia pozycji towarowych SAD na podstawie danych wczytywanych z plików zewnętrznych (XLS).

Omówienie procesu zakupowego w sklepie internetowym Papyrus Sp. z o. o. Spis treści

vi - Edytor tekstu. 1. To, co każdy powinien wiedzieć o vi!!!

Operatory wyraŝeń regularnych zapis opcje c

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Rys. 1. DuŜa liczba nazw zakresów. Rys. 2. Procedura usuwająca wszystkie nazwy w skoroszycie

Wstęp do Informatyki dla bioinformatyków

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Wyszukaj w pomocy. Więcej w witrynie Office.com: Pobieranie Obrazy Szablony

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

POLECENIA ZAKOŃCZENIA PRACY

Bash - wprowadzenie. Bash - wprowadzenie 1/39

2. Język SQL SQL jest językiem deklaratywnym (Charakterystyczną cechą języków

12. OPERACJE NA PLIKACH

Środowisko programisty Zestaw 5

Ćwiczenie nr 1: Systemy liczbowe

Skrypty powłoki w systemie Linux

Edytor tekstu Ms Word Formatowanie tekstu - Akapit

Rys. 1. Zestawienie rocznych kosztów ogrzewania domów

Arkusz kalkulacyjny. Technologia Informacyjna Lekcja 38-39

Metody numeryczne Laboratorium 2

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

Laboratorium nr 7. Temat: Podstawy języka zapytań SQL (część 1) 1. Wprowadzenie do laboratorium

Zastanawiałeś się może, dlaczego Twój współpracownik,

Przygotowanie własnej procedury... 3 Instrukcja msgbox wyświetlanie informacji w oknie... 6 Sposoby uruchamiania makra... 8

Tablice (jedno i wielowymiarowe), łańcuchy znaków

XII. Warunek wielokrotnego wyboru switch... case

Tworzenie formularzy w Microsoft Office Word 2007

Wprowadzenie do programu EXCEL

Podstawowe informacje o obsłudze pliku z uprawnieniami licencja.txt

SSK - Techniki Internetowe

lekcja 8a Gry komputerowe MasterMind

Cel ogólny lekcji: Wprowadzenie do tworzenia stron WWW w języku HTML. Wprowadzenie pojęć: strona WWW, język HTML, dokument HTML.

1 Podstawy c++ w pigułce.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Ustawianie lokalizacji dla indeksów Ustawianie lokalizacji dla indeksów spis kroków

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Kurs obsługi arkusza kalkulacyjnego EXCEL dla nauczycieli Szkoły Podstawowej nr5 w Wodzisławiu Śląskim w roku szkolnym 2004/2005

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Ćw. IV. Tworzenie stron internetowych. Podstawy projektowania, wprowadzenie do języka HTML

Systemy liczenia. 333= 3*100+3*10+3*1

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Rozpoczynamy import Kreator uruchamiamy przyciskiem Z tekstu, znajdującym się na karcie Dane, w grupie Dane zewnętrzne.

Trochę o plikach wsadowych (Windows)

Podstawy Kompilatorów

Redagujemy wzory matematyczne, piszemy w. obcych językach j wstawiamy symbole. Technologia Informacyjna Lekcja 24

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Podstawy programowania (wspólne dla JavaScript i PHP)

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word)

Instrukcja zamknięcia starego roku w KS-FKW. Ad.1 Okresy obrachunkowe

Materiały na zajęcia z podstaw uŝytkowania komputerów OpenOffice. [Przepisz to wszystko co nie znajduje się w nawiasach kwadratowych]

Przypisy i przypisy końcowe

Wykład 5 Charakterystyka języka SQL. Elementy obliczeń relacyjnych.

Przekierowanie wejścia wyjścia:

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Trik 1 Wartości prognozowane bardziej czytelne na wykresie

Transkrypt:

Edytor strumieniowy sed Edytor strumieniowy sed działa poprzez poddawanie edycji danych wejściowych w sposób jaki zaŝąda tego uŝytkownik. Komendy i akcje w tym edytorze podejmowane są dla kaŝdego wiersza po kolei. Rezultaty jego pracy są kierowane na standardowe wyjście (stdout), nie modyfikując oryginalnych plików wejściowych. Przykład 1 $ sed -e 'd' /zadanie/text.txt JeŜeli wykonamy to polecenie, to na wyjściu nic nie otrzymamy. PoniewaŜ w tym przykładzie wywołaliśmy polecenie sed z jednym z poleceń edycyjnych d. Czyli sed otworzy plik /zadanie/text.txt, wczyta wiersz do bufora, wykona wskazane operacje (u nas "d" - usuń wiersz) i wypisze zawartość bufora (w naszym przykładzie bufor będzie pusty!). Takie czynności będą powtarzane dla kaŝdego kolejnego wiersza. Nic nie otrzymamy na wyjściu, poniewaŝ usunęliśmy kaŝdy wiersz! Uwaga: - plik /zadanie/text.txt nie został zmodyfikowany podczas pracy, poniewaŝ sed tylko czyta z pliku uŝywając go tylko jako wejścia danych i nie próbuje go modyfikować (modyfikuje to co wczyta a nie plik wejściowy). - sed jest narzędziem pracującym na wierszach. Polecenie d nie oznaczało po prostu usunięcie wszystkiego naraz, tylko sed wczytywał linijkę po linijce do bufora (zwanego buforem wzorca), a następnie wykonywał polecenie d i wypisywał zawartość bufora. - zamknięcie polecenia d w pojedynczych apostrofach jest dobrym zwyczajem i nie powoduje kolizji z poleceniami konsolowymi. Przykład 2 $ sed -e '1d' /zadanie/text.txt Polecenie to jest bardzo podobne do uŝytego wcześniej z d wyjątkiem jest to, Ŝe zawiera ono teraz 1. Tym razem uŝyliśmy polecenia d poprzedzonego adresem. Poprzez uŝycie adresowania moŝemy przeprowadzić edycję tylko wybranych linii. Przykład 3 Jeśli chcemy usunąć linijki od 1 do 3 to wpiszemy: $ sed -e '1,3d' /zadanie/text.txt Sed traktuje jako zakres dwa adresy oddzielone przecinkiem. Wtedy teŝ operacje zostaną przeprowadzone na danym zakresie. Zakres rozpoczyna się od pierwszego adresu, kończy na drugim. W przykładzie polecenie d zostało zastosowane dla wierszy od 1 do 3 włącznie. Inne wiersze zostały pominięte. Przykład 4 Jeśli chcemy obejrzeć plik /zadanie/text.txt, ale nie jesteśmy zainteresowani oglądaniem komentarzy (komentarze w pliku to linie zaczynające się od znaku '#'). Aby

pominąć komentarze wystarczy usunąć kaŝdą linijkę zaczynającą się od znaku '#'. (Wstaw do swojego pliku znak '#' na początku wybranych trzech linii.) $ sed -e '/^#/d' /zadanie/text.txt Aby zrozumieć składnię '/^#/d' podzielmy to polecenie na kawałki. Najpierw usuńmy 'd' - kasowanie wiersza. Zostaje nam '/^#/' - jest to rodzaj adresowania z uŝyciem wyraŝeń regularnych. Takie wyraŝenie jest zawsze zamknięte między '/'. Definiuje ono wzorzec, a do wszystkich pasujących linii zostanie zastosowane polecenie znajdujące się za nim (u nas 'd' - usunięcie). Przypomnij sobie wyraŝenia regularne (tabele rozdane na zajęciach) Kilka przykładów: WyraŜenie Opis regularne /./ 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' /^[abc]/ Oznacza wiersz, który zaczyna się od 'a', 'b' lub 'c' Przykład 5 $ sed -e '/Ala/d' /zadanie/text.txt To polecenie spowoduje, Ŝe sed usunie kaŝdy wiersz pasujący do wzorca (czyli usunie kaŝdy wiersz zawierający słowo Ala). Jednak łatwiej było by wypisać pasujące wiersze, a te nie pasujące usunąć. $ sed -n -e '/Ala/p' /zadanie/text.txt Nowa opcja, '-n', nakazuje poleceniu sed nie wypisywać wzorca, dopóki nie zostanie wydane odpowiednie polecenie. Łatwo takŝe zauwaŝyć, Ŝe zastąpiliśmy d poleceniem p, które wymusza wypisanie wiersza pasującego do wzorca. Przykład 6 Do tego miejsca potrafimy adresować wiersz, adresować zakres wierszy i wykorzystać wyraŝenie regularne do adresowania, ale moŝliwości jest więcej. MoŜna zdefiniować dwa wyraŝenia regularne oddzielone przecinkiem, a sed edytuje wszystkie wiersze znajdujące się między pierwszym a drugim wyraŝeniem włącznie. Na przykład następujące polecenie wyświetli blok tekstu zaczynający się od wiersza zawierającego "POCZATEK", a skończywszy na wierszu zawierającym "KONIEC": $ sed -n -e '/POCZATEK/,/KONIEC/p' /zadanie/text.txt JeŜeli "POCZATEK" nie zostanie odnaleziony nic nie zostanie wyświetlone. Natomiast jeŝeli sed odnajdzie "POCZATEK", ale nie odnajdzie "KONIEC", otrzymamy wszystkie wiersze od

miejsca odnalezienia do końca. Dzieje się tak, poniewaŝ sed jest zorientowany strumieniowo, czyli nigdy nie wie kiedy nastąpi "KONIEC". Przykład 7 $ sed -e 's/cos/cosinnego/' /zadanie/text.txt PowyŜsze polecenie wypisze zawartość pliku /zadanie/text.txt na standardowe wyjście, zastępując w kaŝdej linii pierwsze wystąpienie napisu "cos" (o ile w ogóle wystąpi) napisem "cosinnego". ZauwaŜmy, Ŝe jest to pierwsze wystąpienie w kaŝdej linii, pomimo iŝ zwykle nie o to nam chodzi. Najczęściej gdy wykonujemy podstawienie napisu, chcemy tego dokonać globalnie. Oznacza to, Ŝe chcemy zastąpić wszystkie wystąpienia napisu w kaŝdej linii, w ten sposób: $ sed -e 's/cos/cosinnego/g' /zadanie/text.txt Dodatkowa opcja 'g' po ostatnim ukośniku wymusza, aby edytor sed wykonał globalne podstawienie. Powinniśmy wiedzieć jeszcze kilka rzeczy o komendzie s///. Po pierwsze, moŝemy uŝyć polecenia s/// wraz z adresem, aby kontrolować, do których wierszy będzie ona zastosowana. Robimy to w następujący sposób: $ sed -e '1,10s/zaczarowanie/zablokowanie/g' /zadanie/text.txt PowyŜszy przykład sprawi, Ŝe wszystkie wystąpienia wyrazu "zaczarowanie" zostaną zastąpione wyrazem "zablokowanie", ale tylko w wierszach od pierwszego do dziesiątego włącznie. $ sed -e '/^$/,/^END/s/wzgórza/góry/g' /zadanie/text.txt W tym przykładzie wyraz "wzgórza" zostanie zastąpiony wyrazem "góry", ale tylko w tych blokach tekstu, które zaczynają się pustą linią, a kończą linią zaczynającą się od liter "END" włącznie. WaŜną rzeczą dotyczącą komendy s/// jest mnogość opcji dotyczących separatorów /. Jeśli chcemy dokonać podstawienia napisów i wyraŝenie regularnie lub napis, który chcemy zmienić zawiera wiele ukośników, moŝemy zmienić separator, podając inny znak po literze "s". Zilustrujmy to przykładem, w którym zamienimy wszystkie wystąpienia /usr/local na /usr: $ sed -e 's:/usr/local:/usr:g' /zadanie/text.txt W powyŝszym przykładzie uŝyliśmy dwukropka jako separatora. Jeśli musielibyśmy uŝyć znaku separatora w wyraŝeniu regularnym, naleŝałoby poprzedzić go odwrotnym ukośnikiem. Przykład 8 Do tej pory wykonywaliśmy jedynie podstawienia zwykłych napisów. Mimo iŝ często się to przydaje, to jednak moŝemy zrobić to samo dla wyraŝeń regularnych. PoniŜsza komenda znajdzie frazę rozpoczynającą się znakiem "<" i kończącą się znakiem ">", posiadającą dowolną ilość znaków pomiędzy nimi. Fraza ta zostanie skasowana (zastąpiona pustym napisem):

$ sed -e 's/<.*>//g' /zadanie/text.txt Jest to dobry początek skryptu, który usunie tagi języka HTML z pliku, jednakŝe nie zadziała dobrze ze względu na pewną właściwość wyraŝeń regularnych. Mianowicie gdy sed szuka wyraŝenia regularnego w linii, znajduje najdłuŝsze moŝliwe dopasowanie w tej linii. Do tej pory nie mieliśmy z tym problemów, poniewaŝ uŝywaliśmy komend d i p, które tak czy inaczej skasują lub wypiszą całą linię. W przypadku komendy s/// nie odpowiada nam to, poniewaŝ cały dopasowany fragment tekstu zostanie zastąpiony przez docelowy napis, a w tym przypadku skasowany. Oznacza to, Ŝe powyŝszy przykład zamieni następującą linię: <b>właśnie</b> o to <b>mi</b> chodziło. W tę: chodziło. Zamiast w poniŝszą, czyli w to, co chcieliśmy osiągnąć: Właśnie o to mi chodziło. Więc, zamiast wyraŝenia regularnego, które znajdzie "dowolną ilość znaków, poprzedzoną znakiem '<' i zakończoną znakiem '>'" musimy uŝyć takiego, które odnajdzie "dowolną ilość znaków róŝnych od znaku '>', poprzedzoną znakiem '<' i zakończoną znakiem '>'". W ten sposób znajdziemy najkrótsze moŝliwe dopasowanie, zamiast najdłuŝszego. Nowe polecenie powinno wyglądać tak: $ sed -e 's/<[^>]*>//g' /zadanie/text.txt W powyŝszym przykładzie wyraŝenie "[^>]" oznacza "znak róŝny od '>'", a symbol "*" uzupełnia je o znaczenie "zero lub więcej znaków róŝnych od '>'". Przykład 9 Składnia wyraŝenia regularnego "[ ]" oferuje jeszcze kilka moŝliwości. MoŜemy określić zakres znaków za pomocą symbolu "-", o ile nie znajduje się on na pierwszym lub ostatnim miejscu: '[a-x]*' W ten sposób wyszukamy zero lub więcej znaków, dopóki wszystkie naleŝeć będą do zbioru "a","b","c"..."v","w","x". Oprócz tego dysponujemy listą dostępnych klas znakowych: Klasa znakowa Opis [:alnum:] Znaki alfanumeryczne [a-z A-Z 0-9] [:alpha:] Znaki alfabetyczne [a-z A-Z] [:blank:] Spacje lub tabulatory [:cntrl:] Dowolny znak kontrolny [:digit:] Cyfry [0-9] [:graph:] Znaki drukowalne (bez odstępów) [:lower:] Małe litery [a-z] [:print:] Znaki drukowalne z odstępami

[:punct:] [:space:] [:upper:] [:xdigit:] Znaki drukowalne za wyjątkiem odstępów, liter i cyfr Wszystkie znaki odstępu DuŜe litery [A-Z] Cyfry w systemie szesnastkowym [0-9 a-f A-F] UŜywanie klas znakowych wszędzie tam, gdzie to moŝliwe jest wysoce poŝądane, poniewaŝ znakomicie dopasowują się one do innych niŝ angielskie zestawów znaków (uwzględniając znaki akcentowane, itd). Przykład 10 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 "ralph powiedział: ": $ sed -e 's/.*/ralph powiedział: &/' /zadanie/text.txt Oto wynik: ralph powiedział: Cześć Jim, ralph powiedział: ralph powiedział: Bardzo podoba mi się ta lekcja seda! ralph powiedział: W powyŝszym przykładzie wykorzystaliśmy znak "&" w podstawianym napisie. Nakazuje on wstawienie w tym miejscu całego tekstu znalezionego przez wyraŝenie regularne. Tak więc cokolwiek zostało znalezione przez ".*" (największa grupa zera lub więcej znaków w linii lub cała linia) moŝe zostać podstawione w dowolnym miejscu podstawianego tekstu nawet kilka razy. Przykład 11 Komenda s/// pozwala nam na definiowanie regionów w wyraŝeniu regularnym, do których moŝemy się następnie odwoływać w podstawianym tekście. W ramach przykładu przyjrzyjmy się następującemu tekstowi: bla ble bli ele mele dudki ala ma kota kot ma alę ZałóŜmy teraz, Ŝe chcemy napisać polecenie, które zamieni "ele mele dudki" na "Victor elemele Von dudki" i tak dalej. Aby tego dokonać najpierw powinniśmy napisać wyraŝenie regularne, które odnajdzie nasze trzy wyrazy oddzielone spacjami: '.*.*.*' Następnie zdefiniujmy regiony, umieszczając wokół kaŝdego interesującego nas miejsca nawiasy poprzedzone wstecznym ukośnikiem:

'\(.*\) \(.*\) \(.*\)' PowyŜsze wyraŝenie regularne zadziała indentycznie jak pierwsze. Jedyną róŝnicą będzie fakt, iŝ definiuje ono trzy logiczne regiony, do których będziemy mogli odnieść się w naszym podstawianym napisie. Oto ostateczny wynik: $ sed -e 's/\(.*\) \(.*\) \(.*\)/Victor \1-\2 Von \3/' /zadanie/text.txt Jak widać, odnosimy się do kaŝdego obszaru ograniczonego nawiasami za pomocą wyraŝenia "\x", gdzie x jest numerem regionu, zaczynając od jedynki. Efekt działania skryptu będzie następujący: Victor bla-ble Von bli Victor ele-mele Von dudki Victor ala-ma Von kota Victor kot-ma Von alę Przykład 12 Gdy zaczynamy tworzyć bardziej złoŝone polecenia, potrzebujemy moŝliwości wpisywania więcej niŝ jednej komendy naraz. MoŜna tego dokonać na kilka sposobów. Po pierwsze, moŝemy rozdzielić komendy średnikami. Na przykład ten zestaw poleceń uŝywa komendy "=", która nakazuje wypisanie numer linii, oraz komendy p, która specjalnie instruuje program sed, aby wypisał linię (poniewaŝ pracujemy w trybie "-n"): $ sed -n -e '=;p' /zadanie/text.txt Gdy podajemy dwie lub więcej komend, kaŝda z nich jest zastosowana (po kolei) do kaŝdej linii pliku. W powyŝszym przykładzie na pierwszej linii zostanie uŝyta komenda "=", a następnie p. Sed wówczas przechodzi do drugiej linii i proces powtarza się. Pomimo iŝ średnik okazał się być przydatny, w niektórych sytuacjach nie zadziała. Alternatywą będzie uŝycie dwóch parametrów -e w celu podania dwóch osobnych komend: $ sed -n -e '=' -e 'p' /zadanie/text.txt Jednak gdy tylko dojdziemy do bardziej złoŝonych poleceń dodawania i wstawiania, nawet wiele parametrów "-e" nam nie pomoŝe. Wówczas najlepiej zrobimy zapisując wszystkie komendy w osobnym pliku, czyli kaŝde polecenie w apostrofach wstawiamy w osobnej linii i bez apostrofu: = p a następnie wywołujemy skrypt parametrem -f: $ sed -n -f skrypt test.txt Ten sposób, choć mniej wygodny, nigdy nas nie zawiedzie.

Przykład 13 Czasem zajdzie potrzeba wykonania kilku poleceń na jednym przedziale. Szczególnie jest to przydatne gdy chcemy wykonać wiele komend s/// w celu przekształcenia wyrazów lub składni w pliku źródłowym. Aby wykonać wiele komend na jednym adresie zapiszmy je w pliku i uŝyjmy znaków "{ }" do pogrupowania ich: 1,20{ } s/[ll]inux/gnu\/linux/g s/samba/samba/g s/posix/posix/g PowyŜsze polecenia zastosują trzy podstawienia w liniach od pierwszej do dwudziestej włącznie. Jako adresów moglibyśmy równieŝ uŝyć wyraŝenia regularnego lub połączyć jedno z drugim: 1,/^END/{ s/[ll]inux/gnu\/linux/g s/samba/samba/g s/posix/posix/g p } W powyŝszym przykładzie wszystkie komendy między znakami "{ }" zostaną uŝyte na tekście od pierwszej linii aŝ po linię, która zaczyna się literami "END" lub, w przypadku braku takowej, aŝ po koniec pliku. Przykład 14 Teraz gdy umiemy juŝ pisać skrypty do edytora sed w osobnych plikach, moŝemy wykorzystać polecenia dołączania, wstawiania i zmiany linii. Polecenia te wstawią wiersz po aktualnej linii, przed aktualną linią lub zastąpią ją. MoŜna ich takŝe uŝywać do wstawiania wielu wierszy jednocześnie. Komendy wstawiania uŝywa się w następujący sposób: i\ Jeśli nie podamy adresu dla tej komendy, zostanie ona zastosowana do kaŝdej linii, a wynik jej działania będzie podobny do poniŝszego: oto linia 1 oto linia 2 oto linia 3 oto linia 4

Jeśli zechcemy wstawić więcej niŝ jeden wiersz przed aktualną linią, wystarczy Ŝe dopiszmy je, dodając odwrotny ukośnik na końcu kaŝdego poprzedniego wiersza: i\ wstaw ten wiersz\ i ten\ i ten\ o, nie zapomnijmy tez o tym. Komenda dołączania działa podobnie, tylko dołącza wiersz lub wiersze po aktualnej linii. Oto przykład: a\ proszę wstawić ten wiersz po kaŝdej linii. Z góry dziękuję! :) Z kolei polecenie "zmień linię" podmieni ją na nową. Ze względu na to, iŝ komendy dołączania, wstawiania i zamiany linii muszą być podawane w kilku wierszach, naleŝy wpisywać je w plikach tekstowych i podawać edytorowi sed za pomocą parametru "-f". Pozostałe metody wpisywania tych komend zaowocują problemami.