====== 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]]