Operációs rendszerek gyakorlat

29
Operációs rendszerek gyakorlat sed parancsok

description

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.: - PowerPoint PPT Presentation

Transcript of Operációs rendszerek gyakorlat

Page 1: Operációs rendszerek gyakorlat

Operációs rendszerekgyakorlat

sed parancsok

Page 2: Operációs rendszerek gyakorlat

Sed parancs

Stream editor – folyamban lévő szöveg szerkesztésePl.: 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_outsed ‘s/nappal/este’ file_in

Page 3: Operációs rendszerek gyakorlat

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

Page 4: Operációs rendszerek gyakorlat

& 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

Page 5: Operációs rendszerek gyakorlat

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

Page 6: Operációs rendszerek gyakorlat

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

Page 7: Operációs rendszerek gyakorlat

String törlése

\l karakter segítségével

sed ‘s/\([0-9]* \)/\l/g’ file_in

Más megoldás?

Page 8: Operációs rendszerek gyakorlat

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

Page 9: Operációs rendszerek gyakorlat

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)

Page 10: Operációs rendszerek gyakorlat

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-val 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?

Page 11: Operációs rendszerek gyakorlat

Operációs rendszerekgyakorlat

awk parancsok

Page 12: Operációs rendszerek gyakorlat

Awk parancs

A.V. AhoP.J. WeinbergerB.W. Kernighan

1977. AT&T Bell Lab

Újabb verziói:• gawk• mawk

Felhasználása:• programozási nyelv implemetálására• assembler

Page 13: Operációs rendszerek gyakorlat

awk

• Adatvezérelt programozási nyelvAdat + mit kell vele csinálni

• Szintaxisaawk ‘/minta/{parancs}’ fileMinta, 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ó.

Page 14: Operációs rendszerek gyakorlat

Legegyszerűbb eset

• Ha nem adunk meg mintát

• Ekkor a fájl minden sorát fel akarjuk dolgozni

Pl.: kinyomtatni

awk ‘{print}’ file

Page 15: Operációs rendszerek gyakorlat

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

Page 16: Operációs rendszerek gyakorlat

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

Page 17: Operációs rendszerek gyakorlat

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.

Page 18: Operációs rendszerek gyakorlat

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!

Page 19: Operációs rendszerek gyakorlat

Mi az $0?

$0 – jelentése a teljes rekord

Pl.: egy teljes fájl kinyomtatása:

awk ‘{print $0}’ file

Page 20: Operációs rendszerek gyakorlat

Több parancs kiadása

• Lehetséges, egymással ;-vel elválasztva, mint a C-ben

awk ‘{print $0; print $0}’ file

Page 21: Operációs rendszerek gyakorlat

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.

Page 22: Operációs rendszerek gyakorlat

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

Page 23: Operációs rendszerek gyakorlat

Matematikai műveletek awk-ban

változó = érték értékadás- x negálásx + y összeadásx - y kivonásx * y szorzásx / y osztásx ^ y hatványozásx % y modulo osztásx++ növelés++x növelésx-- csökkentés--x csökkentés

Page 24: Operációs rendszerek gyakorlat

Igaz, hamis, logikai

x < yx <= yx > yx >= yx == yx != y x && y x ÉS yx || y x VAGY y!x NEM x

Page 25: Operációs rendszerek gyakorlat

Vezérlés átadó kifejezésekif 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

}

Page 26: Operációs rendszerek gyakorlat

Egyszerűbb feladatok

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

2. 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ó!)

3. Nyomtassa ki a képernyőre az /etc/passwd fájlban lévő felhasználó azonosítókat!

Page 27: Operációs rendszerek gyakorlat

Feladatok1. Nyomtassunk ki egy file-ból minden második mezőt2. Nyomtassuk ki a számokat 1-tol 10-ig3. 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:

Page 28: Operációs rendszerek gyakorlat

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

vagyawk 'BEGIN { s=0;}

{s = s + 1}END { print s}' test

Page 29: Operációs rendszerek gyakorlat

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}