Práce s textem v shellu

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

—-

Odkazy

Nahoru