Készíts shell scripet, mely egy megadott fájl tartalmát úgy jeleníti meg, hogy az összes this szót cseréli a that szóra!
#!/bin/bash
echo -n "File: "
read FILE
if [ ! -f $FILE ] ; then
echo "$FILE nem található"
exit 1
fi
cat $FILE | sed 's/this/that/g'
Az előző feladatot oldd meg úgy, hogy a módosított szöveget írd vissza az eredeti fájlba! A módosítás előtti állapotról .bak kiterjesztéssel készüljön egy biztonsági másolat!
#!/bin/bash
echo -n "File: "
read FILE
if [ ! -f $FILE ] ; then
echo "$FILE nem található"
exit 1
fi
mv $FILE $FILE.bak
cat $FILE.bak | sed 's/this/that/g' >$FILE
Készíts awk programot, mely a /etc/passwd fájlból kiírja a felhasználók bejelentkezési neveit!
Írasd ki a /etc/passwd fájlban található UID-eket lebegőpontos (6 egész és 2 tizedes), egész, oktális és hexadecimális számként, végül jelenítsd meg a felhasználó bejelentkezési nevét is!
Számítsd ki a /etc/passwd fájlban levő UID-ek összegét és átlagát! (Tudjuk, hogy ez az adat semmire sem utal, csupán azért használjuk ezt a fájlt, mert minden rendszerben megtalálható.)
Írd ki a képernyőre a /etc/group fájl leghosszabb sorát! [Módosíthatod a feladatot úgy, hogy a legrövidebb nem üres sort jelentítsd meg!]
#!/bin/bash
FILE=/etc/group
cat $FILE | awk -F: '
BEGIN {
mx = 0;
sor = "";
}
{
if ( length($0) > mx ) {
mx = length($0);
sor = $0;
}
}
END {
printf( "A leghosszabb sor hossza: %d\n", mx);
printf ("A leghosszabb sor: %s\n", sor);
}'
Ellenőrizd, hogy mely felhasználóknak van 0-s UID-jük a /etc/passwd-ben! (Ezek teljes jogkörrel rendelkeznek a Unix rendszerekben.)
#!/bin/bash
cat /etc/passwd | awk -F: '
BEGIN {
print ("Rendszergazdák keresése:")
}
{
if ($3==0) print ($0);
}'
Jelenítsd meg az acer.txt fájl sorait úgy, hogy a 40 karakternél hosszabb sorokat ne teljes hosszukban, hanem csak az első 40 karakterig írd ki, és annak jelzésére, hogy a sor ennél hosszabb, a végére írj három pontot! Minden sor elején jelenjen meg, hogy mekkora annak teljes hossza!
FILE=acer.txt
if [ ! -f $FILE ] ; then
echo "$FILE nem található"
exit 1
fi
HOSSZ=40
# -v H=$HOSSZ hatására az awk program indulásakor a H változó értéke a $HOSSZ lesz.
cat $FILE | grep -v ^$ | awk -F -v H=$HOSSZ '
{
printf ("[%d] ", length($0));
if ( length($0) > H )
printf ("%s...\n", substr($0, 0, H));
else
printf ("%s\n",$0);
}'
Jelenítsd meg a 10-nél kisebb pozitív egész számokat és négyzeteiket!
#!/usr/bin/awk -f
BEGIN {
for ( i=9; i>0; i-- ) {
printf ("%d %d\n",i, i*i);
}
}
Jelenítsd meg az /etc/passwd fájl sorait úgy, hogy a mezőket visszafelé íratod ki! Azaz az első mező utolsóként, a második utolsó előttiként, az utolsó pedig elsőként jelenjen meg!
Készíts a /tmp/szolista.txt fájl szavairól előfordulási gyakoriságukat tartalmazó listát! A lista legyen rendezett, elöl a legtöbbet előforduló szó szerepeljen! Példa a kimenetre:
292 the
166 a
#!/bin/bash
FILE=/tmp/szolista.txt
if [ ! -f $FILE ] ; then
echo "$FILE nem található"
exit 1
fi
cat $FILE | awk -F: '
{
szo[$1]++
}
END {
for (i in szo) print (szo[i], i)
}' | sort -n -r | more
Készíts gyakorisági listát a /etc/passwd fájlban található shellekről, melyik hányszor fordul elő?
#!/bin/bash
cat /etc/passwd | awk -F: '
{
shells[$7]++
}
END {
for (i in shells) print (shells[i], i)
}
' | sort -n -r