Práce s textem v shellu

Budeme tady dost pracovat s konfiguračními soubory /etc/passwd a /etc/group

head

Zobrazuje '''prvních''' #n řádků ze souboru. Defaultně je #n 10, dá se nastavit parametrem -n. Tento parametr se dá nastavit i záporně - pak zobrazí vše krom |#n| posledních řádků.

tail

Zobrazí '''posledních''' #n řádků ze souboru. Opět parametr -n, dá se nastavit i záporně - pak zobrazí od |#n|-tého řádku všechny zbylé.


Příklady:

#zobrazí prvních 5 řádek z /etc/group
head -n 5 /etc/group

#zobrazí z /etc/passwd vše krom posledních tří řádek
head -n -3 /etc/passwd

#zobrazí poslední 20 záznamů ze systémového logu
tail -n -20 /var/log/messages


cut

Rozřeže data podle zadaného separátoru, zobrazí pouze zadané položky.
Jiné použití - řeže po jednotlivých znacích.
Parametry:


Příklad:

#zobrazí z /etc/passwd pouze přihlašovací jména společně s ID
cat /etc/passwd | cut -d: -f1,3

#zobrazí měsíc z takto formátovaného data
echo "2010-05-31 12:54" | cut -b6-7


paste

Slepí dva nebo více souborů (jedno z toho může být standardní vstup - parametr pomlčka) zadaným spojovačem

Příklad:

paste -d# uzivatelska_jmena uzivatelska_id



Úloha:

Chci /etc/group dvakrát - tj aby namísto
[groupname]:[password]:[GID]:[user_list]
bylo
[groupname]:[password]:[GID]:[user_list]:[groupname]:[password]:[GID]:[user_list]



Úloha:

Pomocí ''cut'' vypište do jednoho souboru seznam loginů z /etc/passwd, do druhého souboru uživatelská ID. Poté je slepte pomocí ''paste'', tak, aby byl výsledek ve formátu [ID]#[login].


sort

Příklad:

#seřadí /etc/passwd podle uživatelských ID (numericky)
sort -t: -k3 -n /etc/passwd


tr

Od pojmu ''translate''. Změní v řetězcích znaky.
Použití: tr [množinaZnaků] [množinaZnaků2]


Příklady:

# Změní v passwd oddělující dvojtečky na dvoukříže
cat /etc/passwd | tr : "#"

# Ve vstupu změní velká písmenka na malá
echo "Ahoj Svete" | tr A-Z a-z


Úloha:

Znáte Caesarovu šifru? Znamená to posunutí písmenek v abecedě o nějaký počet písmen. Například při posunutí 3 se z "ahoj" stane "dkrm".
Vytvořte pomocí příkazu ''tr'' dva scripty: Jeden bude šifrovat (o tři doprava), druhý bude rozšifrovávat (o tři doleva). Ve vstupu mohou být velká písmena, avšak diakritiku zanedbejme.


join

Velmi silný nástroj, jenž spojuje data podle zadaných položek.
Příkaz JOIN najdete i v SQL databázích.
Například: Máte jednu tabulku (pro nás soubor s nějakými oddělovači), ve které je:
[jméno],[id],[ID primární skupiny]
a druhou tabulku, ve které je
[ID skupiny],[název skupiny]
a chceme vypsat řádky, kde budou jména i názvy primární skupiny

Použijeme join - budeme spojovat přes [ID primární skupiny] z první tabulky a [ID skupiny] z druhé. U nás požadovaných dat se tyto dvě položky budou rovnat.

join -t, -1"3" -2"1" prvniTabulka druhaTabulka

'''Pozor: vstupní tabulky musí být podle spojovaného argumentu seřazeny (použijte sort)'''


Příklad:

join -t: -11 -24 sortedPasswd sortedGroup



Úloha (na cut, paste):

Vstup je řádka: 0 1 2 3 4 5 6 7 8 9 A B C D E F
Výstupem by měla být matice s posouváním (každý řádek o jednu posunutější):
=> 1 2 3 0
6 7 4 5
A B C 9
C D E F
Jde opravdu jen o tenhle vstup.
Pro usnadnění použijte více scriptů, které se budou volat navzájem.


LINKY