# Úvod do UNIXu (SWI095x1h), 6. cvičení, 2005-03-30
# SU1, Malá Strana, MFF UK
#
# Řešení jsou odladěná na FreeBSD 4.11-RELEASE, konkrétní příklady
# na zpracování /etc/passwd se týkají stroje mail.kolej.
#
# $DevNullCZ: cviceni-06.reseni.txt,v 1.2 2005/04/01 08:43:48 jp Exp $
#

#---------------------------------------------------------------------
# sed
#
# sed = Stream  EDitor
#---------------------------------------------------------------------

(s1) v souboru /etc/passwd nahraďte řetězec "bash" za "BASH"


(s2) na konec každého řádku přidejte znak '+'


(s3) spočtěte dohromady všechna UID v souboru /etc/passwd. Výsledek
dnes (2005-03-30) odpoledne byl 5888793.

Hint: echo '1 + 1 + 1' | bc
Hint: tr '\n' '+'


(s3b) napište příkaz, který v aktuálním podstromu nahradí všechny
výskyty řetězce "int" za "long" v C-čkových souborech (tj. v
souborech končících na ".c")

Hint: find, sed -i


(s4) vymažte všechny řádky obsahující řetězec "bash"


(s5) nalezněte jiný způsob řešení příkladu (s4), s použitím option
"-n" sedu.

Hint: najděte si v manu "!"


(s6) vymažte prázdné řádky


(s7) před každý řádek (tj. na samostatný řádek) vypište jeho
pořadové číslo

Hint: "="


(s8) pomocí sedu a ničeho jiného spočti lajny souboru /etc/passwd

Hint: potlač výpis samotných řádků a pro poslední řádek vypiš jeho
pořadové číslo


(s9) vypište poslední řádku

Hint: vyberte poslední řádku, všechny ostatní nevybrané řádky
smažte, opět viz "!"


(s10) chytejte řádky obsahující řetězec "nologin" do hold space a
ten vypište v případě, že narazíte na řetězec "tcsh". Nic jiného než
hold space nechci vypisovat.

Hint: sed funkce "H" a "g"


(s11) vypište řádky obsahující "tcsh" tak jak na ně narazíte a
sbírejte řádky obsahující "nologin"; a na konci tyto nologin řádky
vypište


(s12) očíslujte řádky /etc/passwd tak, že za číslem bude :, pak
tabelátor a poté původní řádek

Hint: "N", dvojnásobné použití sedu


(s13) obraťte soubor /etc/passwd, tj. poslední rádek bude první,
předposlední druhý atd.

Hint: "G"; v každém kroku vložte za aktuální řádek obsah hold space
a výsledný pattern space uložte do hold space. Pro poslední řádek
pak hold space vložte do pattern space a vypište.



#---------------------------------------------------------------------
# vi, ViM 
#
# vi = visual editor
# ViM = Vi IMproved (www.vim.org), včetně verze pro Win
#---------------------------------------------------------------------

(v1) to samé jako (g3), ale původní řešení uložte do souboru,
soubor otevřete v editoru "vim" (rozšíření klasického editoru vi) a
změnte zadání tak, že budete sčítat GID čísla. Použijte pak "-f"
option u příkazu sed.

# Vi je základní editor ve všech unix-like systémech a jeho hodně
# decentně řečeno rozšíření ViM považuju za nejlepší
# (programátorský) editor. Dostal již mnoho ocenění jako nejlepší
# Open Source editor.  Základní informace o něm viz:
#
# http://www.vim.org/6k/features.en.txt
#
# Krátký ViM tutoriál se spustí přímo na mail.kolej příkazem
# "vimtutor". Doporučuju.