1 / 29

Operációs rendszerek gyakorlat

Operációs rendszerek gyakorlat. sed parancsok. 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.:

zola
Download Presentation

Operációs rendszerek gyakorlat

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Operációs rendszerekgyakorlat 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 s search parancsot jelezi /../../ a per jel az elválasztó jel (más is lehet, #) nappal egy reguláris kifejezés este a 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: sed ‘s/[0-9]/(&)/’ file_in file_out 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 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 pedig használjuk a \1 karaktersort sed ‘s/\([0-9]*\)/(\1)/g’ file_in • Több ilyen rész is kijelölhető, mindegyikre a számával hivatkozhatunk: \1 , \2, \3, …, \9 ez hasznos lehet pl. felcserélésnél sed ‘s/\([0-9]*\)\([a-z]* \)/\2\1/g’ file_in

  7. String törlése \l karakter segítségével sed ‘s/\([0-9]* \)/\l/g’ file_in Más megoldás?

  8. 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 abc123 123abc

  9. 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]\+\)/(&)/g’ file_in sed ‘s/\([0-9][0-9]*\)/(&)/g’ file_in abc123  abc(1)(2)(3) abc123  abc(123)

  10. Feladatok • 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) • 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 • Elírás történt egy fájlban. Hogyan cserélné le a 19-cel kezdődő évszámokat 20-val kezdődőre. (évszám 4 karakter!): 1908  2008 • Töröljön ki egy konyv.txt nevű állományban minden a betűt! • 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?

  11. Operációs rendszerekgyakorlat awk parancsok

  12. Awk parancs A.V. Aho P.J. Weinberger B.W. Kernighan 1977. AT&T Bell Lab Újabb verziói: • gawk • mawk Felhasználása: • programozási nyelv implemetálására • assembler

  13. awk • 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ó.

  14. Legegyszerűbb eset • Ha nem adunk meg mintát • Ekkor a fájl minden sorát fel akarjuk dolgozni Pl.: kinyomtatni awk ‘{print}’ file

  15. Feladat Hozzunk létre egy foo_test nevű fájlt a következő tartalommal: awk ‘{print}’ foo_test awk ‘/foo/ {print}’ foo_test foo 12 4 bar 21 6 alma 3 7 foot 4 8 mofoo 5 9 korte 6 5 7 foo 1

  16. 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

  17. 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.

  18. 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!

  19. Mi az $0? $0 – jelentése a teljes rekord Pl.: egy teljes fájl kinyomtatása: awk ‘{print $0}’ file

  20. Több parancs kiadása • Lehetséges, egymással ;-vel elválasztva, mint a C-ben awk ‘{print $0; print $0}’ file

  21. 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.

  22. 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

  23. Matematikai műveletek awk-ban változó = érték értékadás - x negálás x + y összeadás x - y kivonás x * y szorzás x / y osztás x ^ y hatványozás x % y modulo osztás x++ növelés ++x növelés x-- csökkentés --x csökkentés

  24. Igaz, hamis, logikai x < y x <= y x > y x >= y x == y x != y x && y x ÉS y x || y x VAGY y !x NEM x

  25. Vezérlés átadó kifejezések while ( feltétel ) { műveletek } for (inicializalas ; feltétel ; növelés ) { műveletek } if feltétel { művelet } if feltétel { művelet } else { művelet }

  26. Egyszerűbb feladatok • Mit csinál és mi a különbség az awk parancsban megadott /foo/{print}{print} és a /foo/{print; print} között • Hogyan számolná meg awk parancs segítségével, hogy a Tuskevar nevű fájlban hány embert hívnak Tutajosnak? (Egy sorban többször is szerepelhet a szó!) • Nyomtassa ki a képernyőre az /etc/passwd fájlban lévő felhasználó azonosítókat!

  27. Feladatok • Nyomtassunk ki egy file-ból minden második mezőt • Nyomtassuk ki a számokat 1-tol 10-ig • Nyomtassuk ki a sorok számat egy file-ban, mint a wc parancs. • Hogyan lehetne minden második sort kinyomtatni: • Írjuk ki azokat a felhasználókat, akik le vannak tiltva. A letiltás azt jelenti hogy egy * jel van a jelszó helyén: • 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? • Í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}

More Related