Pipe-ok
ls -l > tmpfile
more < tmpfile
[nézelődés]
rm tmpfile
- Ügyesebb megoldás -> pipe használata
- Mire jó? Az egyik program standard outputját egy másik program standard inputjára irányítjuk.
ls -l | more
- Felmerül a kérdés: nem ugyanaz történik, mint az előbb? Csak épp a temp állományt mi "nem látjuk". NEM
- Itt a shell egyszerre indítja el a két programot, tehát nem az történik, mint az előbb, hogy először lefut az ls -l,
és aztán írja ki a valahol eltárolt kimenetet a more: itt az ls futása közben, amint megjelenik valami kimenet, a more
rögtön megkapja azt és elkezdi "feldolgozni".
cat f1 | wc
cat f1 | wc -l ('-w', '-c')
cat f1 | sort
Speciális karakterek semlegesítése (Quoting)
- Szükség lehet arra, hogy bizonyos, a shell számára speciális jelentéssel bíró karaktereket megvédjünk a shell helyettesítő hatásától
- Mikre kell gondolni: pl. $,*,?,[] stb.
Lehetőségek
Egyetlen karakter levédése: \
datum=20050212
echo $datum
echo \$datum
cat al*
cat al\*
cat >ab\*c
rm a*
!!
rm a\*
!!
Hosszabb string TELJES levédése: ' '
Használható az előző esetekben is, azaz
echo '$datum'
cat 'al*'
rm 'a*'
ls -l [Vv]*
ls -l '[Vv]*'
Hosszabb string RÉSZLEGES levédése: " "
Első megközelítésben ugyanaz, mint az előbb, csak a körny. változók kiértékelése megengedett
echo "$datum"
cat "al*"
ls "${HOME}/*"
: azt nézi meg, van-e a saját könyvtárunkban * nevű file
Kicsit pontosabban: ugyanaz, mint a ' ', kivételek: $, ` ` (backticks), \
echo "$datum"
echo "`date`"
echo "Dante: \"Ki itt belépsz, hagyj fel minden reménnyel!\""
echo 'Dante: \"Ki itt belépsz, hagyj fel minden reménnyel!\"'
Beágyazott parancsvégrehajtás
echo "Ebben a könyvtárban `ls -l | wc -l` db file van"
Megjegyzés: nem a pontos értéket adja
Használható a $(parancs) forma is
Programok csoportosítása
Lehetőségünk van a futtatandó programjaink csoportosítására: ez annyit tesz, ohy a zárójelbe tett shell parancsot egy utasításként kezelhetjük
(cat f1; ls) | wc
cat f1 | (echo "Most történik a file írás"; cat > f2)
sort parancs
Egy szöveges file sorait rendezhetjük
sort f1
Kapcsolók
- -o: A kiemeneti file nevét adhatjuk meg
sort f1 -o f1
ls -la | sort -o rendezett_lista
(ls -la | sort > rendezett_lista)
- -m: Rendezett fileok összefésülése
sort -m f1 f2
Fontos, hogy ez nem rendez, csak összefésül két rendezett álományt
- -c: Ellenőrzi, hogy az adott állomány rendezett-e
sort -c f1
- -b: Figyelmen kívül hagyja a bevezető WP-eket
sort -b f1
- -d: Csak a WP-eket és az alfanumerikus karaktereket veszi figyelembe
sort -d f1
- -f: Nem különbözteti meg a kis -és nagybetűket
sort -f f1
- -r: Fordított sorrendű rendezés
sort -r f1
- -u: Az azonos sorok csak egyszer fognak szerepelni a (rendezett) kimenetben
- -t char: A megadott karaktert használja mezőelválasztónak. Alapértelmezés szerint a sorban található egyes mezőket WP-ek választják el egymástól
sort -t : f1
- -k[num]: Megadhatjuk, hogy melyik mező legyen a rendezés kulcsa, azaz eszerin a mező szerint fog rendezni.
A mezők és a karakterpozíciók számozása 1-től kezdődik
sort -k2 f1
Megadható egy mezőcsoport is:
sort -k2,4 f1
sort -t/ -k3 f1
cut parancs
Megadott részeket tudunk kivágni egy sorból
Kapcsolók
- -b: Csak a megadott byte-okat adja vissza
cut -b1 f1
cut -b2-4 f1
cut -b2,4 f1
- -c: Csak a megadott karaktereket adja vissza. Jelenleg azonos a -b -vel
- -f: Csak a megadott mezőket adja vissza. Alaphelyzetben a mezőket TAB karakterek választják el egymástól, de ezt át lehet állítani.
Fontos: kiírja azokat a sorokat is, amikben nem szerepel a mezőelválasztó karakter, azaz egyetlen mezőből állnak!
- -d: Az alapértelmezett mezőelválasztó karaktert tudjuk megváltoztatni
cut -d: -f2 file1
cut -d'\' -f1 file1
cut -d' ' -f3 file1
- -s: -f esetén nem írja ki azokat a sorokat, melyek nem tartalmazzák a megadott mezőelválasztó karaktert
uniq parancs
Eltávolítja a duplicált sorokat a bemenetéről
uniq f2
uniq f1 f2
(Ilyenkor f2-be a kimenet kerül!!!)
Kapcsolók
uniq -u f2
Csak a nem duplicált sorokat írja ki
uniq -d f2
Csak a duplicált sorokat írja ki
uniq -c f2
Kiírja minden sor elé, hogy az hányszor fordult elő
uniq -i f2
A kis és nagybetűket figyelmen kívül hagyja
uniq -f[num] f2
Figyelmen kívül hagyja az első num mezőt
uniq -s[num] f2
Figyelmen kívül hagyja az első num karaktert
uniq -w[num] f2
Maximum num db karaktert vesz figyelembe
head parancs
A inputnak csak az első "pár" sorát írja ki
head f1
head f1 f2
head -5 f1
(már nem használatos)
head -n5 f1
tail parancs
Az inputnak csak az utolsó "pár" sorát írja ki
tail f1
tail f1 f2
tail -3 f1
tail -n3 f1
tail +2 f1