S Stream Editor.pdf

(648 KB) Pobierz
124532932 UNPDF
Podstawy open source – system SUSE Linux cz. II 2-127
2.6 Edytor sed (Stream Editor)
sed to edytor do manipulowania plikami tekstowymi. Jako edytor
„strumieniowy” różni się od innych, takich jak vi lub gedit .
sed nie pracuje interaktywnie, ale jest kontrolowany
opcjami polecenia liniowego lub skryptem takim, jak
tryb ex w vi .
Edytor 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 uruchamiania sed: sed opcje „polecenie” nazwa_pliku
Najprostszym poleceniem sed jest „ p” (print):
geeko@da51:~ > sed 'p' loremipsum.txt 
LOREM IPSUM DOLOR SIT AMET
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet,
Lorem ipsum dolor sit amet,
...
Jak widać w powyższym przykładzie, każdy wiersz jest dwukrotnie
drukowany, ponieważ sed domyślnie wysyła każdy wiersz na
standardowe wyjście. By temu zapobiec, powinno się dodać opcję -n :
geeko@da51:~ > sed ­n 'p' loremipsum.txt 
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet,
consectetuer adipiscing elit,
...
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532932.014.png 124532932.015.png
Podstawy open source – system SUSE Linux cz. II 2-128
Przyjrzyjmy się bliżej części „polecenie” składni wywołania sed .
Przede wszystkim, można podać deklarację adresu z numerami wierszy, które
sed powinien sprawdzić. Są różne możliwości:
brak deklaracji
- wszystkie wiersze
numer
- tylko wiersz o numerze numer, np:
geeko@da51:~ > sed ­n '1p' loremipsum.txt 
LOREM IPSUM DOLOR SIT AMET
start, end
- wiersze od start do end, np:
geeko@da51:~ > sed ­n '2,4p' loremipsum.txt 
Lorem ipsum dolor sit amet,
consectetuer adipiscing elit,
$
- ostatni wiersz, np:
geeko@da51:~ > sed ­n '36,$p' loremipsum.txt 
facilisis at vero eros et accumsan
et iusto odio dignissim qui blandit
praesent luptatum zzril delenit
au gue duis dolore te feugat nulla facilisi.
/regexp/
- wiersze zgodne z regularnym wyrażeniem regexp, np:
geeko@da51:~ > sed ­n '/^D/p' loremipsum.txt 
Duis te feugifacilisi.
Duis autem dolor in hendrerit
Duis te feugifacilisi per suscipit
Duis te feugifacilisi.
Duis autem dolor in hendrerit in
Wyjaśnienie. Zostaną wydrukowane wiersze zaczynające się od
dużej litery „D”.
numer, /regexp/ - wiersze od numer do pierwszego wiersza, który spełnia
kryterium regexp, np:
geeko@da51:~ > sed ­n '9,/^D/p' loremipsum.txt 
suscipit lobortis nisl
ut aliquip ex ea commodo consequat.
Duis te feugifacilisi.
Wyjaśnienie. Zostaną wydrukowane wszystkie wiersze od wiersza 9
do pierwszego wiersza zaczynającego się od dużej litery „D”.
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532932.016.png
Podstawy open source – system SUSE Linux cz. II 2-129
Można też, w podobny sposób, użyć wyrażenia
regularnego jako punktu początkowego dla sed .
Regularne wyrażenia edytora sed są podobne do tych
omówionych wcześniej. Jednak są tu dodatkowe znaki specjalne
wymagające poprzedzenia znakiem „ \”:
\( |)
\{ |}
Można połączyć dwa lub więcej poleceń sed używając opcji -e :
geeko@da51:~ > sed ­n ­e '3p' ­e '6p' ­e '9p' loremipsum.txt 
Lorem ipsum dolor sit amet,
ut lacreet dolore magna aliguam erat volutpat.
suscipit lobortis nisl
Wyjaśnienie. Wiersze 3, 6 oraz 9 zostaną wyświetlone na ekranie.
Można też rozdzielić polecenia używając znaku „;” :
geeko@da51:~ > sed ­n '3p;6p;9p' loremipsum.txt
Lorem ipsum dolor sit amet,
ut lacreet dolore magna aliguam erat volutpat.
suscipit lobortis nisl
Ćwiczenie. Używanie sed – część I
Użyj sed do wyświetlenia na ekranie wierszy 10 do 15 z dowolnego pliku
tekstowego.
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532932.017.png 124532932.001.png 124532932.002.png 124532932.003.png
Podstawy open source – system SUSE Linux cz. II 2-130
Poniżej podano kilka innych ważnych poleceń sed :
„a” (append ) dołącza jeden lub więcej wierszy za podanym wierszem
(wierszami) w poleceniu. Przykład:
geeko@da51:~ > sed '1aHello Geeko' loremipsum.txt 
LOREM IPSUM DOLOR SIT AMET
Hello Geeko
Lorem ipsum dolor sit amet,
consectetuer adipiscing elit,
...
Jeżeli chcesz dodać więcej niż jeden wiersz, należy znak nowego wiersza
zamaskować znakiem ukośnika „\”:
geeko@da51:~ > sed '1aHello Geeko\
> Hello Suzie' loremipsum.txt
LOREM IPSUM DOLOR SIT AMET
Hello Geeko
Hello Suzie
Lorem ipsum dolor sit amet,
consectetuer adipiscing elit,
...
„i” (insert) dodaje jeden lub więcej wierszy przed podanym
(podanymi):
geeko@da51:~ > sed '1iHello Geeko' loremipsum.txt 
Hello Geeko
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet,
consectetuer adipiscing elit,
...
„r nazwa_pliku” wstawia zawartość podanego pliku za podanym
wierszem (wierszami):
geeko@da51:~ > sed '1r numbers.txt' loremipsum.txt 
LOREM IPSUM DOLOR SIT AMET
0000
123
...
98798
765765
Lorem ipsum dolor sit amet,
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532932.004.png 124532932.005.png 124532932.006.png 124532932.007.png
Podstawy open source – system SUSE Linux cz. II 2-131
consectetuer adipiscing elit,
sed diem nonummy nibh euismodtincidunt
...
„d” (delete) kasuje wskazany wiersz (wiersze).
geeko@da51:~ > sed '1,3d' loremipsum.txt 
consectetuer adipiscing elit,
sed diem nonummy nibh euismodtincidunt
ut lacreet dolore magna aliguam erat volutpat.
„c” (replace) zastępuje podanym tekstem wskazany wiersz (wiersze):
geeko@da51:~ > sed '1,3cHello Geeko' loremipsum.txt 
Hello Geeko
consectetuer adipiscing elit,
sed diem nonummy nibh euismodtincidunt
ut lacreet dolore magna aliguam erat volutpat.
Wyjaśnienie. Wiersze 1 do 3 zostały zastąpione tekstem „Hello Geeko”.
„w” (write) zapisuje wyjście edytora sed do podanego pliku. Można
użyć tego polecenia zamiast przekierowania wyjścia przez użycie „> ”.
geeko@da51:~ > sed ­n '1w output.txt' loremipsum.txt
Wyjaśnienie. Tworzony jest nowy plik o nazwie output.txt. Zawiera pierwszy
wiersz pliku loremipsum.txt.
Jeżeli pominiemy opcję „ -n ”, zawartość loremipsum.txt
zostanie wyświetlona na ekranie, a nie zapisana do
pliku output.txt.
„q” (quit) kończy pracę z edytorem.
geeko@da51:~ > sed '3q' loremipsum.txt 
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet,
Ćwiczenie. Używanie edytora sed – część II
Użyj sed do usunięcia pierwszych dziesięciu linii wybranego pliku
tekstowego oraz zapisania ich w pliku short.txt.
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532932.008.png 124532932.009.png 124532932.010.png 124532932.011.png 124532932.012.png 124532932.013.png
Zgłoś jeśli naruszono regulamin