Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaAttila Magyar Megváltozta több, mint 10 éve
1
Operációs rendszerek 6. gyakorlat sed parancsok
2
Sed parancs Stream editor – folyamban lévő szöveg szerkesztése Pl.: szöveg lecserélésére Működése: Keres (a reguláris kifejezés alapján) Lecserél (az illesztett mintát a helyettesítő szövegre) Kiír (képernyőre, fájlba) Pl.: sed ‘s/nappal/este’ file_in >file_out sed ‘s/nappal/este’ file_in
3
Példa sed ‘s/nappal/este/’ file_in >file_out ssearch parancsot jelezi /../../a per jel az elválasztó jel (más is lehet, #) nappalegy reguláris kifejezés estea helyettesítendő szöveg sed ‘s#nappal#este#’ file_in >file_out
4
& jel Ha a reguláris kifejezésre illesztett szöveget is fel szeretnénk használni a helyettesítő szövegben - & jellel megtehető. Pl.: ki akarjuk egészíteni a szöveget, stb. pl. ha zárójelbe akarjuk tenni a megtalált stringrészt sed ‘s/[0-9]/(&)/’ file_in >file_out sed ‘s/[0-9]/(&)/’ file_in pl. vagy ha csillagok közé akarjuk tenni sed ‘s/[0-9]/*&*/’ file_in
5
Globális csere Alapesetben csak az első illeszkedést cseréli Ez kiterjeszthető a teljes (globális) szövegre: sed ‘s/[0-9]/(&)/g’ file_in
6
Illeszkedő kifejezés egy része Ha az illeszkedő reguláris kifejezés egy részét kívánjuk csak felhasználni: Ekkor a tárolni kívánt részt tegyük zárójelbe () a reguláris kifejezésben (‘bebuffereljük’) Megjegyzés: a zárójel speciális karakter, így védeni kell a speciális jelentéstől backspashekkel: \( \) A helyettesítő részben hivatkozhatunk az egyes buffer tartalmakra sorszámukkal (hányadik zárójelbeli kifejezésrész) pl.: \1 első zárójeltartalom sed ‘s/\([0-9]\+\)/(\1)/g’ file_in
7
Illeszkedő kifejezés egy része Több ilyen rész is kijelölhető, mindegyikre a számával hivatkozhatunk: \1, \2, \3, …, \9 ez hasznos lehet pl. felcseréléses feladatoknál sed ‘s/\([0-9]\+\)\([a-z]\+ \)/\2\1/g’ file_in
8
String törlése \l karakter segítségével sed ‘s/\([0-9]\+ \)/\l/g’ file_in Más megoldás?
9
abc123 123abc Példa Cseréljük fel a stringben a betűket és számokat. sed ‘s/\([a-z]\+\) \([0-9]\+\)/\2\1/g’ file_in
10
Feladat Tegyük zárójelbe a számokat, de ne egyesével, hanem csoportosan: sed ‘s/\([0-9]\)/(&)/g’ file_in sed ‘s/\([0-9]*\)/(&)/g’ file_in sed ‘s/\([0-9]+\)/(&)/g’ file_in sed ‘s/\([0-9]\+\)/(&)/g’ file_in sed ‘s/\([0-9][0-9]*\)/(&)/g’ file_in abc123 abc(1)(2)(3) abc123 abc(123)
11
Feladatok 1.Egy ’honap.txt’ nevű fájlban hogyan cserélné le a january hónap nevét 01. számra, mely után zárójelben szerepeljen az eredeti név is: january 01. (january) 2.Egy szövegben ‘titkosítani’ kellene a neveket. Hogyan cserélné le a nagybetűvel kezdődő, utána csak kisbetűket tartalmazó neveket ‘xxx’ karaktersorra: Barbara xxx 3.Elírás történt egy fájlban. Hogyan cserélné le a 19-cel kezdődő évszámokat 20-szal kezdődőre. (évszám 4 karakter!): 1908 2008 4.Töröljön ki egy konyv.txt nevű állományban minden a betűt! 5.Hogyan cserélne le egy állományban kis vagy nagy A-val kezdődő, számot nem tartalmazó, kis vagy nagy Z-re végződő szavakat 3 darab nagy A-ra? AbcdxyZ AAA
12
Operációs rendszerek gyakorlat awk parancsok
13
Awk parancs A.V. Acho P.J. Weinberger B.W. Kernigham 1977. Újabb verziói: gawk mawk Felhasználása: programozási nyelv implemetálására assembler awk
14
Adatvezérelt programozási nyelv Adat + mit kell vele csinálni Szintaxisa awk ‘/minta/{parancs}’ file Minta, ami illeszkedik egy szövegdarabra, és a művelet. Minta: per jelek közé, reguláris kifejezés. Illeszkedés esetén futtatja a parancsrészt. Egyéb esetben nem történik semmi. Több mint és parancs is megadható.
15
Legegyszerűbb eset Ha nem adunk meg mintát Ekkor a fájl minden sorát fel akarjuk dolgozni Pl.: kinyomtatni awk ‘{print}’ file
16
Feladat Hozzunk létre egy foo_test nevű fájlt a következő tartalommal: awk ‘{print}’ foo_test awk ‘/foo/ {print}’ foo_test foo124 bar216 alma37 foot48 mofoo59 korte65 7foo1
17
Két szabály megadása Több sorban egy aposztófon belül megadható több szabály is: awk ‘/12/ {print „Bingo”} /21/ {print „Bongo”}’ foo_test
18
Elválasztó jelek Rekordok A program a bemeneti fájlt rekordokban olvassa be, és dolgozza fel. Alapesetben a rekordelválasztó jel a \n sortörés – azaz soronként történik a feldolgozás. Ez a jel az RS (record separator) változóban van eltárolva. Mezők A rekordok mezőkre vannak osztva. Alapesetben a mezőelválasztó a TAB, SPACE vagy újsor. Egy mezőre a $ jellel hivatkozhatunk: első mező a $1, második a $2, stb. Az awk tudja, hogy az aktuális rekordban hány mező van – amit az NF (number of field) változóban tárol Ezek a változók felhasználhatók az awk-ban.
19
Példa echo ‘Ez egy hosszú sor’ | awk ‘{print $4 $3 $2 $1}’ echo ‘Ez egy hosszú sor’ | awk ‘{print $4, $3, $2, $1}’ echo ‘Ez egy hosszú sor’ | awk ‘{print $4 ” ” $3 ” ” $2 ” ” $1}’ echo ‘Ez egy hosszú sor’ | awk ‘{print NF}’ Feladat: Nyomtassuk ki a sor utolsó mezőjét, ha nem tudjuk pontosan hány mezőből áll a sor!
20
Mi az $0? $0 – jelentése a teljes rekord Pl.: egy teljes fájl kinyomtatása: awk ‘{print $0}’ file
21
Több parancs kiadása Lehetséges, egymással ;-vel elválasztva, mint a C-ben awk ‘{print $0; print $0}’ file
22
Műveletek mezőértékekkel Az awk képes egy adott szöveget szövegként és számként is kezelni. awk ‘{print $1”:” $2+$3}’ file Megjegyzés: nincs hiba, ha szöveget kell kezelni, ekkor a számérték 0.
23
Begin –End minták Begin minta – a bemeneti fájlok feldolgozása előtt illeszkedik és fut le End minta – fájlok feldolgozása után használható Pl.: awk ‘BEGIN {sum = 0} {sum = sum + $3} END {print „Az összeg: ” sum}’ test
24
Matematikai műveletek awk-ban változó = érték értékadás - xnegálás x + yösszeadás x - ykivonás x * yszorzás x / yosztás x ^ yhatványozás x % ymodulo osztás x++növelés ++xnövelés x--csökkentés --xcsökkentés
25
Igaz, hamis, logikai x < y x <= y x > y x >= y x == y x != y x && yx ÉS y x || yx VAGY y !xNEM x
26
Vezérlés átadó kifejezések if feltétel { művelet } if feltétel { művelet } else { művelet } while ( feltétel ) { műveletek } for (inicializalas ; feltétel ; növelés ) { műveletek }
27
Feladatok 1.Nyomtassunk ki egy file-ból minden második mezőt 2.Nyomtassuk ki a számokat 1-tol 10-ig 3.Nyomtassuk ki a sorok számat egy file-ban, mint a wc parancs. 4.Hogyan lehetne minden második sort kinyomtatni: 5.Írjuk ki azokat a felhasználókat, akik le vannak tiltva. A letiltás azt jelenti hogy egy * jel van a jelszó helyén: 6.Nagyon sok függvényt ismer az AWK, pl a length a szöveg hosszát adja meg. Így hogyan lehetne a leghosszabb sor méretét kinyomtatni? 7.Írjunk programot, mely ugyanúgy működik, mint a wc program, vagyis kiírja a sorok, szavak és karakterek számat:
28
Megoldások 1. awk '{ for(i=1; i<=NF; i+=2) print $i }' test 2. awk 'BEGIN { for(i=1; i<=10; i++) print i}‘ 3. awk 'END { print NR }' test vagy awk 'BEGIN { s=0;} {s = s + 1} END { print s}' test
29
Megoldások 4. awk '{ if ( NR % 2 == 0 ) print $0}' test 5. awk 'BEGIN { FS=":" } {if ($2 == "*") print $1 " letiltva"}' /etc/passwd 6. awk '{ if (length($0) > max ) max = length($0) } END { print max }' test 7. awk '{szo = szo + NF; kar = kar + length($0)} END{ print NR,szo,kar}
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.