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

# 
# hw8.1) - nasobilka; nekolik problemu
# - idea 2 vnorene for-cykly
# - vyresit formatovani
# 	- printf "%4d" 9
# 	- co na konci radku?
#
# hw8.2) - seq
# - idea: while cyklus s podminkou
# - spravne inicializovat promenne (increment) v jednotlivych pripadech
# - spravne napsat podminku
# - zkontrolovat, ze program skonci i pro e.g. zaporny inkrement
# 	- e.g. od 1 do 10 po -1 by se nemelo zacyklit

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

# zaludnosti bashe
# locale definuje mimo jine poradi znaku pro sort, to uz vime
export LC_ALL=en_US.UTF-8
touch a b c 
# ale bash to bere v potaz i pro soubory!! (ale zalezi jak v jake verzi)
echo [A-C]
# vypise se (nejspis) "b c" a to (nejspis) proto, ze znaky jsou v locale poradi aAbBcC...

# POUCENI: pouzivat C locale, kdyz chceme psat prenositelne skripty
export LC_ALL=C
# nespolehat na to, ze poradi znaku je fixni, a ze ascii everywhere


#
# grep, regexpy
#

# prakticka poznamka: zkouset regexy muzeme treba takhle
echo 'protipriklad' | grep priklad

# vypsat radky z /etc/passwd co ma:
# (v labu getent passwd) 

# A) login ve tvaru "xxxxxNxx"
# x jedno pismeno, N jedna cifra
cat /etc/passwd | grep '^[a-zA-Z]\{5\}[0-9][a-zA-Z]\{2\}'
# pozn: pozor (man ascii)
echo _ | grep '[A-z]'

# B) sloupecek s uid ma hodnotu 10
cat /etc/passwd | grep '^[^:]*:[^:]*:10:'
# nebo
cat /etc/passwd | grep '^\([^:]*:\)\{2\}10:'

# A && B
cat /etc/passwd | grep '^[a-zA-Z]\{5\}[0-9][a-zA-Z]\{2\}' | grep '^[^:]*:[^:]*:10:'
# nebo v jednom:
cat /etc/passwd | grep '^[a-zA-Z]\{5\}[0-9][a-zA-Z]\{2\}:[^:]*:10:'

# A || B
cat /etc/passwd | grep -e '^[a-zA-Z]\{5\}[0-9][a-zA-Z]\{2\}' -e '^[^:]*:[^:]*:10:'
cat /etc/passwd | grep '^\(^[a-zA-Z]\{5\}[0-9][a-zA-Z]\{2\}\)\|\([^:]*:[^:]*:10:\)'

# match cisla 0-299
# rozdelit pomoci \| na podproblemy, ktere umime snadno
# 0-9
echo 1 | grep '^[0-9]$'
# 10-99
echo 99 | grep '^[1-9][0-9]$'
# 100-299
echo 299 | grep '^[12][0-9][0-9]$'

# dohromady
# (vsimnete si vnejsich zavorek \(, ty jsou kvuli tomu, ze \| ma nejmensi prioritu)
printf '1\n9\n10\n99\n123\n299\n300' | grep '^\([0-9]\|\([1-9][0-9]\)\|\([12][0-9][0-9]\)\)$'

# co 200-255 ??

# neslo by to nejak lip?
# NAPOVEDA: nemusime psat regex rucne :-)
