====== Práce s textem v shellu ======
Budeme tady dost pracovat s [[vyuka:konfiguracni_soubory|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 [[http://cs.wikipedia.org/wiki/Caesarova_%C5%A1ifra|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
----
=====Odkazy=====
* [[http://www.abclinuxu.cz/clanky/navody/unixove-nastroje-7-tr-cut-sort-a-uniq]]
* [[http://www.faqs.org/docs/abs/HTML/textproc.html]]
* [[http://www.watsys.unh.edu/Darlene/TechToolsFiles/LammersUNIXDemo/UNIX_Intro.html]]