#####
##### reseni domacich ukolu
#####

# hw9.1)
grep '\<packet\>' rfc793.txt  | wc -l
# '\<packet\>' '\([^a-zA-Z0-9_]\|^\)packet\([^a-zA-Z0-9_]\|$\)' '\bpacket\b'
# nebo grep -w 
# Doplnujici otazka: jake z vyse uvedenych reseni je standardni?
# http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html

grep '\<packet\>\|\<network\>' rfc793.txt | wc -l

# tri shodna cisla po sobe, slo pekne vyresit backreferenci
# '\([0-9]\)\1\1'

# hw9.2) - ipv4 adresa
# POZOR pouziva extended regexp
RE="($(seq 0 254  | tr '\n' '|')255)"
echo 192.168.255.0 | grep -E "$RE\.$RE\.$RE\.$RE"
# NORMALNE treba
RE="\($(seq 0 254  | tr '\n' '|' | sed 's/|/\\|/')255\)"
echo 192.168.255.0 | grep "$RE\.$RE\.$RE\.$RE"

# hw9.3) domena/mail/adresa
# vyguglovat co je to domena/mail/adresa
# 	e.g. https://www.ietf.org/rfc/rfc1035.txt bod 2.3.1
# pripravit si testovaci data
# regexpy - building bloky

# miniukol: jak udelat regexp na kombinaci a-z a ., kde tecka
# neni nikdy ani na zacatku, ani na konci, ani vedle tecky
{
cat <<EOF
aaa
a.b
aa.b.c
a..b
.
.a.c
a.c.
EOF
} | grep '^[a-z]\{1,\}\(\.[a-z]\{1,\}\)*$'


#####
##### Cviceni:
#####

# co dela??
tr '[A-Z]' '[a-z]'
tr ']A-Z[' ']a-z['
tr 'A-Z' 'a-z'
# odpoved to same, [ a ] jsou pro tr normalni znaky :-)

#
# sed - uvod
#

# basic prikazy: p,d,q
# basic options: -e, -n 
# [adresa_od[,adresa_do]]!PRIKAZ

# nasimulovat head -n 10
seq 15 | sed '10q'			# dobre reseni, na velkych souborech skonci asap
seq 15 | sed '11,$d'		# funguje, ale prochazi cely vstup
seq 15 | sed -n '1,10p'		# obdobne

# nasimulovat tail -n 1
seq 15 | sed -n '$p'
seq 15 | sed '$!d'

# vypis radky 8-12
seq 15 | sed -n '8,12p'
seq 15 | sed '8,12!d'
seq 15 | sed -n '8,12p;12q'		# to same, ale efektivnejsi, protoze:
seq 10000000 | time sed -n '8,12p'
seq 10000000 | time sed -n '8,12p;12q'

# vypiste radky 5 a 9
seq 10 | sed -n -e '5p' -e '9p'
seq 10 | sed -n '5p;9p'

# = vypise cislo radku
# zkuste nasledujici prikaz, odkud jdou ta cisla?
seq 10 | sed -n '='

# emulujte wc -l
seq 10 | sed -n '$='

# maly doplnek, sort umi tridit podle ruznych policek
# (taky numericky podle vybranych, atp, viz man sort)
# setridte passwd podle shellu a pak podle loginu
getent passwd | sort -k7 -k1 -t: > passwd

# nechte jen radky od loginu yaghob do loginu zavoral
cat passwd | sed  -n '/yaghob/,/zavoral/p' 
cat passwd | sed  '/yaghob/,/zavoral/!d' 

# nahradte vsechny /bin/bash za /bin/zsh u studentu co jim konci login na 2am
# $ je nutny, protoze 'bash2am'
cat passwd | sed '/^[^:]*2am:/s/bash$/zsh/'

