Obsah
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 #ntého řádku všechny zbylé.
#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:
-d[znak]
- oddělovač polí-f1,3
- vypsat pouze tato pole. Lze zadat jednu položku (4
), seznam(1,3
), interval(1-5
)-b2-5
- vypsat pouze tyto bajty(znaky). Pokud je tento parametr zadán, na-d
nezáleží.
#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
-d[znak]
- delimiter - spojovač
paste -d: uzivatelska_jmena uzivatelska_id
Úloha 1
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 2
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
-t[znak]
- field separator - oddělovač jednotlivých polí-k[seznam čísel nebo intervalů]
- které položky použít pro třídění-n
- třídit numericky-r
- obrátit-c
- netřídit, jen zkontrolovat zda je setříděno
#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.
Základní použití: tr [množinaZnaků] [množinaZnaků2]
Přepínače
-d
(pouze jedna množina) - smaže zadané znaky z textu-s
(pouze jedna množina) - vícenásobné výskyty znaků změní na jedny
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 #>ahoj svete # Odstrani z textu samohlasky echo "Ahoj svete" | tr -d aeiouy #>hj svt # Vymaže z textu dvojité mezery echo "Ahoj svete jak se mas?" | tr -s " " #>Ahoj svete jak se mas?
Ú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
-t
je parametr, kterému jsme dali separátor (čárku ,)-1
je parametr, kterému se dá číslo pole z první tabulky (3)-2
je parametr, kterému se dá číslo pole z druhé tabulky (2)
Pozor: vstupní tabulky musí být podle spojovaného sloupce seřazeny (použijte sort)
join -t: -11 -24 sortedPasswd sortedGroup
—-