Mini handbook Polecenie sed i awk


Polecenie sed
1. Podstawową czynnością wykonywaną za pomocą polecenia sed jest zamiana jednej
wartości na inną. Realizuje się to za pomocą polecenia sed  s/{old value}/{new
value}/  .
Przykład:
echo  Mój pies nazywa się Misiek | sed  s/Misiek/Puszek/
Dokonanie kilku różnych zmian w jednej linii jest możliwe po zastosowania jednej z
trzech poniższych metod.:
a. Użycie opcji  e dla każdej zamieniany np. sed  e  s/Thuesday/Friday  e
 s/after/before/
b. Wykorzystaniu średnika tuż po sleshu kończącym poprzednią operację np. sed
 s/Thuesday/Friday/; s/after/before/
c. Wykorzystanie wieloliniowego polecenia np.
sed  s/Thuesday/Friday/
Øð s/after/before/
Należy pamiętać, że sed wyszukuje pierwsze dopasowanie w danej linii i wykonuje na
nim operacje, stąd też gdy w jednej linii pojawią się dwa poszukiwane wzorce tylko
na pierwszym z nich zostanie przeprowadzona określona operacja natomiast na
drugim już nie. Aby to zmienić należy ustawić atrybut globalności dla danej operacji
(opcja g po ostatnim slashu).
Przykład:
echo  Mam na imię Piotr. Również mój syn ma na imię Piotr | sed  s/Piotr/Paweł/g
2. Polecenie sed najczęściej wykonuje się do operacji na plikach. Nazwę pliku podaje się
jako jeden z parametrów polecenia sed np. sed  s/1/2/ plik
Uwaga!!
Polecenie sed samoistnie wyświetla efekt swojej pracy na ekranie, ale nie zmienia
zawartości pliku, na którym operuje, aby tego dokonać należy przekierować strumień
wyjściowy do nowego pliku np. sed  s/1/2/ plik > plik_2.
3. Istnieje możliwość wykonania danej operacji tylko po spełnieniu określonych
warunków
a. Po pojawieniu się konkretnego słowa.
Przykład:
Plik sample_1:
One 1
Two 2
One 3
Three 1
One 1
sed  /One/ s/1/2/ sample_1.
W powyższym przykładzie zostaną zamienione tylko te 1, które są
poprzedzone słowem One. Operacja ta odnosi się oczywiście do każdej z linii z
osobna.
b. Ograniczenie wykonania operacji do konkretnych linii
Przykład:
©WiesÅ‚aw Piasecki 2008 1
sed  5,6 s/1/2/ sample_1
Operacja zamiany 1 na 2 będzie przeprowadzona tylko dla linii 5 i 6 o ile w
tych liniach występuje 1.
4. Listę operacji jakie sed powinien wykonać można zapisać w pliku. W takim pliku
każdą z operacji zapisuje się w nowej linii. Wynika to z faktu, iż sed takie instrukcje
interpretuje jako osobne operacje (polecenia).
Przykład:
Plik sed_list:
/two/ s/1/2/g
/one/ s/1/4/
Wywołanie skryptu z poleceniami sed jest następujące:
sed sed_list nazwa_pliku
5. Polecenie sed pozwala na niewyświetlanie tekstu na ekran (opcja  n), a tym samym
uniemożliwia zapisanie zmian w pliku po przekierowania strumienia np. sed  n  f
 s/1/2/ plik1 >plik2.
Wykorzystanie:
Jeśli chcemy wyciąć tylko dwie lini np. 2 i 6 z danego pliku i zapisać je do innego
pliku. Należy użyć przełącznika  n oraz  p (print). Polecenie sed dla rozwiązania
powyższego problemu byłoby następujące: sed  n  2,6p nazwa_pliku
6. Za pomocą polecenia sed można kasować linie (opcja d na po ostatnim slashu).
a. Kasowanie wszystkich linii, w których występuje podane słowo np. sed  /two/
d plik1 spowoduje usunięcie wszystkich linii zawierających słowo two w
pliku plik1, oczywiście zmiany nie zostaną zapisane w pliku.
b. Kasowanie linii na podstawie podanych ich numerów np. sed  1,2 d plik1,
spowoduje usunięcie pierwszej i drugiej linii w pliku plik1
c. Usunięcie linii rozpoczynającej bądz kończącej się podanym słowem np. sed
 /^two/ d plik1, spowoduje usunięcie tylko tych linii w pliku plik1, które
zaczynają się od słowa two, a polecenie sed  /two$/ d plik1, skasuje wszystkie
linie w pliku plik1 kończące się na słowie two.
d. Skasowanie wszystkich pustych linii w pliku sed  /^$/ d nazwa_pliku
e. Skasowanie wszystkich linii, oprócz tej która zawiera podane słowo np. sed
 /two/ !d my_file, spowoduje skasowanie wszystkich linijek z tego pliku nie
zawierających słowa two.
7. Polecenie sed umożliwia także wstawianie i dołączanie tekstu.
a. Dołączanie tekstu umożliwia opcja a, aby dołączyć tekst na koniec pliku
należy użyć polecenia sed o następującej konstrukcji:
sed  $a\
Øð My first sed text\
Øð My second line my_file
$ oznacza koniec pliku, a  append, \ -powrót karetki i jest wymagany po a
(brak \ po a spowoduje błąd).
b. Wstawienie tekstu po podanym numerze linii można też zrealizować za
pomocÄ… opcji a np. sed  3a\ Czwarta linijka tekstu\ PiÄ…ta linijka tekstu my_file
powyższa instrukcja spowoduje wstawienie dwóch linijek po trzeciej linii w
pliku my_file.
©WiesÅ‚aw Piasecki 2008 2
c. Wstawienie tekstu od podanego numeru linii realizuje siÄ™ za pomocÄ… opcji i.
Dla przykładu polecenie sed  3i\ Trzecia linijka tekstu\ Czwarta linijka tekstu
my_file, wstawi dwie linie poczÄ…wszy od trzeciej linii w pliku my_file
8. Polecenie sed może służyć do zamiany całej linii na inną. W tym celu należy
wykorzystać opcję c polecenia sed. Dla przykładu polecenie: sed  /two/ c\ We will
never use the word two my_file, spowoduje zamianę każdej linii w której występuje
słowo two na nową linię we will never use the word two w pliku my_file.
9. Wcześniejsze zakończenie działania polecenia sed. Normalnie polecenie sed wykonuje
się aż do momentu osiągnięcia końca danego pliku, jednak w niektórych sytuacjach
zachodzi potrzeba wcześniejszego zakończenia przetwarzania pliku przez polecenie
sed. Realizuje siÄ™ to za pomocÄ… opcji q (quit) np. polecenie sed  /two/ s/1/2/5q my_file
spowoduje, że polecenie sed przetworzy tylko pięć pierwszych linii pliku my_file.
Natomiast polecenie: sed  /two/ s/1/2/; /three/q my_file spowoduje zakończenie
przetwarzania polecenia sed po znalezieniu słowa three, w danej linii z pliku my_file.
Polecenie awk
Awk jest dobrym narzędziem do przetwarzania tekstów i generacji raportów,
wykorzystującym język podobny do C, pythona lub basha.
1. W poleceniu awk nawiasy {. . .} pełnią funkcję nawiasów grupujących pewne
wyrażenia.
2. W awk zmienna $0 reprezentuje obecnie przetwarzaną linię, dlatego też polecenie
awk  { print $0} file_name, spowoduje wyświetlenie wszystkich przetwarzanych linii
z pliku o nazwie file_name. Podobnie zadziała polecenie awk  { print} file_name.
3. Do określenia separatora pól służy opcja  F, która występuje po poleceniu awk. Dla
przykładu wybranie i wyświetlenie pierwszego i trzeciego pola z pliku /etc/passwd
można zrealizować za pomocą polecnia: awk  F":"  { print $1" " $3 } /etc/passwd.
Uwaga!!!
Istnieje także możliwość określenia separatora w postaci prostego wyrażenia
regularnego np. w skrypcie awk BEGIN {FS ="\t+ "} oznacza, że za znak separatora
będzie brany co najmniej jedne tabulator.
4. Wypisanie formatowanych wierszy. Polecenie awk  F":"  { print $1 "\t\tuid: " $3 }
/etc/passwd, spowoduje wyświetlenie trzeciego pola po dwóch tabulatorach i słowie
 uid:  w każdej linii.
5. Wykorzystanie skryptów zewnętrznych dla awk. Aby wymusić na poleceniu awk
wykorzystanie pliku z zapisanymi dla tego poleceniami operacjami należy posłużyć
się przełącznikiem  f (file), a następnie podać nazwę skryptu awk. Przykład: awk  f
skrypt_awk plik.
a. Budowa skryptu awk.
Skrypt awk składa się z bloków, wśród których możemy wyróżnić dwa
ciekawe bloki. Pierwszym z nich jest blok BEGIN, który jest
wykonywany przed uruchomieniem przetwarzania pliku wejściowego i
dlatego też jest dobrym miejscem do definiowania zmiennych
globalnych np. zmiennej odpowiedzialnej za rozróżnianie separatora
wierszy tj. zmiennej FS. Za przykład takiego skryptu z blokiem BEGIN
może posłużyć nam poniższy fragment tekst:
©WiesÅ‚aw Piasecki 2008 3
BEGIN { FS=":"}
{print $1"\t\tuid: "$3}
Drugim z wyróżnionych bloków jest blok końca END, który
wykonywany jest po zakończeniu przetwarzania np. poniższy fragment
skryptu wyświetla liczbę pustych linii w pliku.
BEGIN { x = 0 }
/^$/ { x = x +1}
END { print x}
W bloku poczÄ…tkowym ustawiana jest zmienna liczbowa x na 0 przy
poprawnym dopasowaniu do podanego wzorca (linia 2 w skrypcie)
zwiększana jest zmienna x o jeden, a po zakończeniu przetwarzania
całego pliku wyświetlana jest jej wartość .
10. Zmiennne systemowe awk:
Table B.4: Zmiennne systemowe Awk
Zmienna Opis
ARGC Liczba argumentów z linii poleceń
ARGV Tablica zawierająca argumenty z linii poleceń
CONVFMT Tekstowy format konwersji dla liczb (%.6g). (POSIX)
ENVIRON Tablica asocjacyjna z wartościami zmiennych
systemowych
FILENAME Nazwa obecnego pliku
FNR Podobnie jak NR, ale odnosi sie do bierzÄ…cego pliku
FS Separator pól (domyślnie pusty)
NF Liczba pól w obecnym rekordzie
NR Numer obecnego rekordu
OFMT Format wyjściowy dla liczb (%.6g)
OFS Wyjściowy format separatora pól (a blank)
ORS Wyjściowy separator rekordów (a newline)
RLENGTH Długość tekstu zwrócona przez funkcję match()
RS Separator rekordów (a newline)
RSTART Pierwsza pozycja w tekście znaleziona przy
wykorzystaniu funkcji match()
SUBSEP Separator znaków dla tablicy subskrypcji (\034)
11. Zmienne w skryptach awk:
a. Liczbowe
Øð Definiowane za pomocÄ… operacji przypisania np. x = 1
Øð Dokonuje siÄ™ na nich wszystkich znanych operacji arytmetycznych z
języków C, C++
Øð WyÅ›wietlane w nastÄ™pujÄ…cy sposób: print x;
b. Tablicowe
Øð W awk tablice najczęściej numerowane sÄ… od 1, a nie od 0
Øð Można wykorzystywać ich  Å‚aÅ„cuchowość tzn. wykorzystać, fakt że
awk zawsze zapisuje indeks tablicy w postaci tekstu. (tablice
asocjacyjne) np. x["ciocia"] = "Beata"; print x["ciocia"]
©WiesÅ‚aw Piasecki 2008 4
Øð Wykorzystanie specjalnych narzÄ™dzi do obsÅ‚ugi tablic:
1. Polecenia in, np. if ("ciocia" in x){print "W rodzinie nie mamy
cioci"}, które umożliwia sprawdzenie, czy podany element
znajduje siÄ™ w tablicy (tutaj ciocia), albo wykorzystaniu tego
polecenia do realizacji określonych działań na wszystkich
elementach tablicy za pomocÄ… konstrukcji for (i in list){}
2. Usuwanie elementu tablicy za pomocÄ… polecenia delete tab[nr]
np. delete x["ciocia"]
c. Aańcuchowe
Øð Definiowane za pomocÄ… instrukcji podstawienia np. tekst="To jest
mój pierwszy skrypt awk"
Øð WyÅ›wietlane za pomocÄ… print, printf lub formatowane za pomocÄ…
sprintf
Øð Nie sÄ… one tablicami jak to ma miejsce w C czy C++.
12. W skryptach awk można używać:
a. wszystkich znanych operatorów arytmetycznych, relacyjnych z języka C, C++
np. +=, ++, ^=, <=, > itd.
b. Konstrukcji:
Øð while (){},
Øð do{}while(),
Øð for(i in list){},
Øð for(expr1;expr2;expr3){},
Øð if(){}else{},
Øð innych znanych z C, C++.
c. Poleceń do sterowania pętlami
Øð break
Øð continue
13. Operacje na zmiennych łańcuchowych (tekstowych).
a. Formatowanie łańcuchów wyjściowych. Do tego celu służą dwie poniższe
funkcji:
Øð Pierwsza z nich printf wyÅ›wietla sformatowany Å‚aÅ„cuch na
standardowym urządzeniu wyjścia. Działa w identyczny sposób co jej
odpowiedniczka z języka C.
Øð Druga z nich sprintf zwraca sformatowany Å‚aÅ„cuch, co umożliwia
wykorzystanie jej rezultatu do wykonania operacji podstawienia np.
tekst=sprintf("%s otrzymał %d", Tomek ,4);
b. Określenie długości tekstu za pomocą funkcji length(), np. print length(tekst),
zwróci wartość równą 16.
c. Określenie pierwszego wystąpienia podanego stringu w tekście, za pomocą
funkcji index(tekst, szukany_string) jeżeli nie znajdzie zwraca 0, np. print
index(tekst, "otrzymał") zwróci wartość 7.
d. Zwrócenie nowego łańcucha składającego się wyłącznie z małych liter i
stworzonego na podstawie tekstu. TÄ… operacjÄ™ realizuje siÄ™ za pomocÄ… funkcji
tolower (tekst)
e. Zwrócenie nowego łańcucha składającego się wyłącznie z wielkich liter i
stworzonego na podstawie tekstu. TÄ… operacjÄ™ realizuje siÄ™ za pomocÄ… funkcji
toupper (tekst) np. print toupper(tekst) wyświetli następujący łańcuch:
"TOMEK OTRZYMAA 4"
f. Zwracanie podtekstu z danego tekstu za pomocÄ… polecenia
substr(tekst,start_pos,length), gdzie tekst jest łańcuchem, z którego chcemy
©WiesÅ‚aw Piasecki 2008 5
"wyciąć" podłańcuch rozpoczynający się od pozycji start_pos i o długości
length.
Przykład:
tekst="Tomek otrzymał 4"
print substr(tekst,7,8);
Spowoduje wyświetlenie słowa "otrzymał".
g. Wyszukiwanie indeksu rozpoczynającego podłańcuch w tekście z
wykorzystaniem wyrażeń regularnych odbywa się z wykorzystaniem polecenia
match(łańcuch, /wyrażenie_regularne/). Polecenie match, jeśli nie znajdzie
żadnego dopasowania zwraca 0. Za każdym razem wykorzystuje ono dwie
zmienne systemowe awk: RSTART i RLENGTH. RSTART ma wartość taką
samą jak wartość zwracana przez polecenie match() jest to pozycja
znalezionego pierwszego pasującego podłańcucha. Natomiast RLENGTH
określa jego rozmiar.
h. Podmiana łańcuchów realizowana jest za pomocą dwóch poleceń:
Øð sub (regexpression, replstring, tekst)  funkcja ta spowoduje
podmienienie pierwszego wystąpienia pasującego do wyrażenia
regularnego regexpression w tekście na replstring.
Øð gsub (regexpression, replstring, tekst)  funkcja ta jest podobna w
działaniu do funkcji sub() z tym, że jej działanie jest globalne tzn.
zamieni ona wszystkie wystÄ…pienia, a nie tylko pierwsze.
i. Tworzenie tablicy (tab) elementów poprzez podział łańcucha (string) na
części poprzez wyróżnienie separator za pomocą funkcji split(string, tab,
separator)
Przykład:
dni_tyg="Pn,Wt,Åšr,Czw,Pt,Sob,Niedz"
liczba_dni=split(dni_tyg, dni, ",")
print liczba_dni" "dni[2]
Efektem działania powyższego kodu będzie wyświetlenie linijki zawierającej
następujące informacje: "7 Wt"
Funkcja split zwraca ilość utworzonych elementów w tablicy.
14. Elementy skryptu awk:
a. Wyrażenia regularne. Wykorzystuje się je w celu wyszukania odpowiedniego
fragmentu linii i wykonaniu na nim określonych operacji. Podstawowy sposób
użcia wyrażeń regularnych jest następujący:
/regular-expression/ {blok instrukcji}
©WiesÅ‚aw Piasecki 2008 6


Wyszukiwarka

Podobne podstrony:
AGH Sed 4 sed transport & deposition EN ver2 HANDOUT
POLECENIA PODSTAWOWE
Uruchom wiersz poleceń, a powiem ci, kim jesteś XP
Zestaw poleceń Spikit dla Internet Explorer 11 Windows 7 8 1
mini generator szumu
Mini Be Chaos
The Contortionist s Handbook
Strona polecenia do bazy danych
BWT CW MINI
poleceniaa

więcej podobnych podstron