Úkol: Zbrusu nový příklad globsub určený k hromadnému nahrazení určitého patternu nějakým stringem ve všech souborech zadaných adresářů (viz příklad z přednášky nahrazení všech (c) 2015 za (c) 2016.
Přesné zadání:
Napište skript globsub s následujícími parametry:
[options]:
-q : quiet, bez výpisu (viz dále), plus implikuje přepínač -y
-y : yes, na jednotlivých souborech se neptá jestli na nahrazování, prostě to automaticky udělá
-d : dry-run, jen vypíše co by nahradil, ale substituci přímo neprovádí
-p : preserve, při substituci zachovejte původní datum změnění souboru
[cesty k adresářům, ve kterých se mají hledat soubory pro substituci]
-může jich být více
-když chybí, brát aktuální adresář
[lines]
-regex, který říká, na jakých řádcích se má provádět daná substituce (když prázdný, tak pro všechny řádky)
pattern
-regex, říkající co se na dané řádce má přesně nahradit
substitute
-literal string toho, čím se nahradí pattern
=
Parametr zadaný na začátku skriptu (přímo v něm, jako proměnná):
SUFF
- říká, jaké koncovky mají mít soubory, u kterých chceme substituovat
- využívají shellové wildcardy
- může jich být více (pak or), oddělené mezerou
==
Přesné zadání:
Napište program, který pro všechny soubory ze zadaných adresářů (i jejich podadresářů) splňující daný SUFF sufix provede na řádcích odpovídajících lines substituci pattern (to, co pattern regex matchne) za subtitute (literal string). Před samotnou substitucí vypište pro každý soubor jeho název a za tím řádky, které se budou měnit, a to v již změněné variantě (tj. jak budou vypadat po substituci). Následně se uživatele zeptejte, zda chce změny provést. Uživatel může odpovědět následující:
yes / jen enter bez ničeho: Ano, proveďte substituci
all : Ano, proveďte subtituci a na další soubory se neptejte a substituujte rovnou (ale stále vypisujte jak "by změny vypadaly")
dir : Ano, proveťe subtitutici a na další soubory, které jsou ze stejného adresáře / z adresářů pod adresářem aktuálního souboru se neptejte a substituujte rovnou (ale stále vypisujte jak "by změny vypadaly")
no : Nesubstituujte, pokračujte na další soubor
quit: ukončete skript
V případě volby dryrun se provádí jen první vypisování, jak by změny vypadaly. Uživatele se skript na nic neptá a žádné substituce neprovádí. Při volbě quiet se zas hned provádí substituce a nic se nevypisuje. Přepínač yes funguje jako odpověď all před prvním souborem. A nakonec přepínač preserve má zajistit to, že po substituci se neaktualizuje datum změny souboru.
===
Výsledky:
Přišlo nás 17, 3 vyhodil, s 6 chtěl mluvit (z toho jeden za 2 co vím), 3? dostali za dva, 5? za jedna. Plus mínus jedna sem a tam. Obecně ale říkal, že buď jsme fakt dobří nebo je ten příklad moc lehký, tj. asi ho úspěšnost (mile) překvapila. Což ale asi taky znamená, že průměrný příklad / termín bývá těžší...
===
Hinty (řečené až po zkoušce):
-Na zjištění souborů, které se budou měnit, použít find (s tím, že i sufix se tam použije skrz -name *$SUFF
--(!!! Potřeba tu chytře vyřešit to, že v SUFF může být víc přípustných suffixů, pak roztrhnout do ořítek, které find umí !!!)).
-V případě, že arg. line chybí, tak mu dát hodnotu, která matchne všechny řádky a neřešit tak složité if then stromy.
-Na preserve použít chytrou vlastnost touche, která zkopíruje timestamp jednoho souboru jinému (tj. není třeba ze souborů složitě extrahovat changed date a pak ho novým dávat)
-Daná substituce se nejlíp řeší jedním sedem "sed -ri /line/ s/pattern/sibstitute", s tím, že je ještě třeba v line, pattern, i substitute escapovat dopředná lomítka a uvozovky
==
Zdání ze zkoušky:
-Úplně nejde po blbých syntaktických chybách
--Na ústních se vás může zeptat na to, proč v <<for i in "$QUAK">> máte okolo $QUAK uvozovky a že je to blbost, ale když mu odpovíte tak ok.
-Dokáže ocenit (a IMHO to dokáže subtitutovat chyby jinde), když použijete něco z toho, co říkal na přednášce a celkově se u toho zamyslíte a šetříte si práci
-Spíš asi nemá rád opakování kódu (tj. např. vzít kód, označit ho svorkou a udělat šipku vedle, že tam patří taky je no-no, má se použít fce).
===
Počítač tradičně jeden pro všechny. Tak polovinu času jsem u něj byl já, jinak by byl spíš prázdnej. Takže toho se fakt člověk nemusí bát.
Forst 4. 6. 2015 - globsub
Seznámení se základními principy operačního systému UNIX, převážně z uživatelského hlediska. Absolvent kurzu by měl být schopen napsat netriviální program v shellu.
Re: Forst 4. 6. 2015 - globsub
Příspěvek od anonym64578 »
Na ústním to bylo v pohodě. Prošli jsme kód od začátku do konce & kde byla chyba, tak se zastavil.
Chtěl vysvětlit proč je tam chyba & jak bych jí opravil. A většinou to byly přesně ty věci na které upozorňoval na přednášce [viz. třeba uvozovky proměnné ve for cyklu výše]
Také komentoval některé části kódu, že nedávají moc smysl a jsou zbytečně složité. Ale nevím, jak moc tomu přikládal váhu při známkování.
Jediná věc, co mě trošku zaráží, je, že si mě zavolal na opravu. Tam jsem mu řekl vesměs to co chtěl slyšet (tak 50/50). A pak mi řekl, že ten kód není špatný, používám tam to co nás učil, ale že ty ostatní, co mají za 1 ho mají hezčí, takže za 2. Tak nevím jestli jsem šel na ústní s tím, že mám 2-3 a vytáhl jsem to skoro na 1. Nebo jsem to měl 1-2 ale ústní jsem podělal, takže výsledná za 2...
Chtěl vysvětlit proč je tam chyba & jak bych jí opravil. A většinou to byly přesně ty věci na které upozorňoval na přednášce [viz. třeba uvozovky proměnné ve for cyklu výše]
Také komentoval některé části kódu, že nedávají moc smysl a jsou zbytečně složité. Ale nevím, jak moc tomu přikládal váhu při známkování.
Jediná věc, co mě trošku zaráží, je, že si mě zavolal na opravu. Tam jsem mu řekl vesměs to co chtěl slyšet (tak 50/50). A pak mi řekl, že ten kód není špatný, používám tam to co nás učil, ale že ty ostatní, co mají za 1 ho mají hezčí, takže za 2. Tak nevím jestli jsem šel na ústní s tím, že mám 2-3 a vytáhl jsem to skoro na 1. Nebo jsem to měl 1-2 ale ústní jsem podělal, takže výsledná za 2...
Zpět na „SWI095 Úvod do UNIXu“
Přejít na
- Aktuální informace
- ↳ Studijní oddělení
- ↳ Knihovna
- ↳ Studentská komora Akademického senátu (SKAS)
- ↳ Volby na ak. rok 2013/2014
- Všichni
- ↳ Práce
- ↳ Klubovna
- ↳ Toto fórum
- ↳ Státní závěrečná zkouška
- ↳ Bakalářské SZZ
- ↳ Magisterské SZZ
- ↳ Info for foreign students
- ↳ Akce
- ↳ Fotbalový turnaj 2008
- Informatika ZS
- ↳ Výuka ZS 1. ročník
- ↳ DMI002 Diskrétní matematika
- ↳ 2007
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ MAI054 Matematická analýza I
- ↳ 2007
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ MAI057 Lineární algebra I
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG030 Programování I
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ SWI120 Principy počítačů a operačních systémů
- ↳ SWI087 Principy počítačů
- ↳ Ostatní
- ↳ DMI051 Úvod do řešení problémů kombinatorických, mat. i jiných (IPS) II
- ↳ Výuka ZS 2. ročník
- ↳ MAI056 Matematická analýza III
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ OFY016 Fyzika pro nefyziky I - Svět kolem nás
- ↳ SWI089 Ochrana informace I
- ↳ SWI096 Internet
- ↳ TIN061 Algoritmy a datové struktury II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ Ostatní
- ↳ Aplikační software
- ↳ NPRG035 Jazyk C# a platforma .NET
- ↳ NPRG041 Programování v C++
- ↳ AIL062 Výroková a predikátová logika
- ↳ 2007
- ↳ 2006
- ↳ 2005
- ↳ PGR013 Java
- ↳ MAI059 Pravděpodobnost a statistika
- ↳ Výuka ZS 3. ročník
- ↳ SWI099 Administrace Systemu Windows
- ↳ SWI015 Programování v Unixu
- ↳ SWI098 Principy překladačů
- ↳ 2006
- ↳ Ostatní
- ↳ DBI007 Organizace a zpracování dat I
- ↳ 2006
- ↳ MAI062 Algebra I
- ↳ PGR003 Počítačová grafika I
- ↳ SWI090 Počítačové sítě I
- ↳ Výuka ZS NMgr.
- ↳ TIN066 Datové struktury I
- ↳ TIN062 Složitost I
- ↳ TIN064 Vyčíslitelnost I
- ↳ MAI060 Pravděpodobnostní metody
- ↳ SWI004 Operační systémy
- ↳ SWI106 Administrace Unixu
- ↳ Ostatní
- ↳ NTIN090 Základy složitosti a vyčíslitelnosti
- ↳ OPT042 Programování s omezujícími podmínkami
- ↳ AIL002 Neuronové sítě
- ↳ AIL025 Evoluční algoritmy I
- ↳ AIL069 Umělá inteligence I
- ↳ NDBI001 Dotazovací jazyky I
- ↳ TIN070 Testování software
- ↳ NDBI027 Datové sklady a analytické metody pro Business Intelligence
- ↳ NDBI034 Vyhledávání multimediálního obsahu na webu
- ↳ NPRG023 Softwarový projekt
- Informatika LS
- ↳ Výuka LS 1. ročník
- ↳ MAI055 Matematická analýza II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ MAI058 Lineární algebra II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG031 Programování II
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ TIN060 Algoritmy a datové struktury I
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ SWI095 Úvod do UNIXu
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ Ostatní
- ↳ Výuka LS 2. ročník
- ↳ SWI071 Ochrana informace II
- ↳ TIN071 Automaty a gramatiky
- ↳ PRG033 Ročníkový projekt - specifikace
- ↳ DMI011 Kombinatorika a grafy I
- ↳ DBI025 Databázové systémy
- ↳ Ostatní
- ↳ SWI036 Programování pro Windows I & II
- ↳ SWI096 Internet
- ↳ PRG005 Neprocedurální programování
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ NSWI143 Architektura počítačů
- ↳ Výuka LS 3. ročník
- ↳ Ostatní
- ↳ PGR004 Počítačová grafika II
- ↳ PRG036 Technologie XML
- ↳ SZZ026 Bakalářská práce
- ↳ PRG003 Metodika programování a filozofie programovacích jazyků
- ↳ MAI064 Matematické struktury
- ↳ MAI042 Numerická matematika
- ↳ SWI021 Počítačové sítě II
- ↳ SWI045 Rodina protokolů TCP/IP
- ↳ NPRG038 Pokročilé programování pro .NET
- ↳ Výuka LS NMgr.
- ↳ SWI109 Konstrukce překladačů
- ↳ NPRG042 Programování v paralelním prostředí
- ↳ SWI117 Technologie vývoje webových aplikací
- ↳ SWI026 Softwarové inženýrství
- ↳ MAI061 Metody matematické statistiky
- ↳ I1 Ostatní Teoretická informatika
- ↳ I2 Ostatní Softwarové systémy
- ↳ I3 Ostatní Matematická lingvistika
- ↳ I4 Ostatní Diskrétní modely a algoritmy
- ↳ AIL026 Evoluční algoritmy II
- ↳ AIL070 Umělá inteligence II
- ↳ NDBI010 Dokumentografické informační systémy
- ↳ NDBI023 Dobývání znalostí
- ↳ NDBI016 Transakce
- ↳ NDBI006 Dotazovací jazyky II
- ↳ NAIL029 Strojové učení
- Matematika
- ↳ Výuka LS 1. ročník
- ↳ Lineární algebra 2
- ↳ Programování 2
- ↳ Matematická analýza 1b
- ↳ Volitelné předměty
- ↳ Výuka LS 2. ročník
- ↳ Pravděpodobnost a statistika
- ↳ Teorie Míry a integrálu II
- ↳ Algebra II
- ↳ Matematická analýza 2b
- ↳ Ostatní
- ↳ Výuka LS 3. ročník
- ↳ Předměty numeriky
- ↳ Úvod do funcionální analýzy
- ↳ Funkcionální analýza I
- ↳ Vybrané partie z funkcionální analýzy
- ↳ Náhodné procesy 2
- ↳ Matematická statistika 2
- ↳ Teorie pravděpodobnosti 2
- ↳ Matematická ekonomie
- ↳ Ostatní
- ↳ LS - Předměty MMIB a pokročilé Algebry
- ↳ Všeobecná diskuse
- ↳ Počítačová algebra
- ↳ Teorie čísel a RSA
- ↳ Aplikovaná kryptografie II
- ↳ Standardy v kryptografii
- ↳ Kryptoanalytické útoky
- ↳ Aplikace bezpečnostních mechanismů
- ↳ Kvantové a DNA počítače
- ↳ Faktorizace velkých čísel
- ↳ Algebraická geometrie v kladné charakteristice
- ↳ Výuka ZS 1. ročník
- ↳ MAA001 Matematická analýza 1a
- ↳ PRM044 Programování I
- ↳ MAA079 Proseminář z kalkulu 1a
- ↳ DMA005 Diskrétní matematika
- ↳ ALG001 Lineární algebra a geometrie I
- ↳ Ostatní
- ↳ Volitelné předměty
- ↳ Výuka ZS 2. ročník
- ↳ MIB
- ↳ Matematická analýza 2a
- ↳ Teorie míry a integrálu
- ↳ Numerika
- ↳ Algebra
- ↳ Předměty finanční matematiky
- ↳ Ostatní
- ↳ Výuka ZS 3. ročník
- ↳ Matematická statistika
- ↳ Teorie pravděpodobnosti
- ↳ Náhodné procesy
- ↳ Optimalizace
- ↳ Předměty numeriky
- ↳ Předměty finanční matematiky
- ↳ Komplexní analýza
- ↳ Funcionální analýza
- ↳ Ostatní
- ↳ ZS - předměty MMIB a pokročilé Algebry
- ↳ Úvod do algebry
- ↳ Složitost pro kryptografii
- ↳ Samoopravné kódy
- ↳ Teoretická kryptografie
- ↳ Aplikovaná kryptografie I
- ↳ Datové a procesní modely
- ↳ Eliptické křivky
- ↳ Členění kryptografických standardů
- ↳ Kryptografické protokoly
- ↳ Úvod do teorie grup
- ↳ Právní aspekty zabezpečení dat
- ↳ Komutativní okruhy
- Fyzika ZS
- ↳ Výuka ZS 1. ročník
- ↳ OFY067 Fyzika v experimentech I
- ↳ MAF027 Lineární algebra I
- ↳ OFY021 Fyzika I (mechanika a molekulová fyzika)
- ↳ OFY056 Programování pro fyziky
- ↳ MAF033 Matematická analýza I
- Oborový mix aktuální
- ↳ Anglický jazyk
- ↳ Tělesná výchova
- ↳ Granty GAUK
- Odkazy
- ↳ Wiki
- ↳ SKAS
- ↳ Spolek Matfyzák
- Matematika Archiv
- ↳ Výuka LS 2006/2007 3. ročník
- ↳ Předměty numeriky
- ↳ Úvod do funcionální analýzy
- ↳ Náhodné procesy 2
- ↳ Matematická statistika 2
- ↳ Teorie pravděpodobnosti 2
- ↳ Matematická ekonomie
- ↳ Výuka LS 2006/2007 2. ročník
- ↳ Pravděpodobnost a statistika
- ↳ Teorie Míry a integrálu II
- ↳ Angličtina
- ↳ Algebra II
- ↳ Matematická analýza 2b
- ↳ Ostatní
- ↳ Výuka LS 2006/2007 1. ročník
- ↳ Volitelné předměty
- ↳ Lineární algebra 2
- ↳ Programování 2
- ↳ Matematická analýza 1b
- Zrušené předměty
- ↳ SWI087 Principy počítačů
- ↳ SWI120 Principy počítačů a operačních systémů
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG029 Programování v C++
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ PRG032 Objektově orientované programování
- ↳ 2006
- ↳ 2005
- ↳ 2004
- ↳ SWI097 Základy operačních systémů
- ↳ NDBI003 Organizace a zpracování dat II
- Roztřídit (resty)
- ↳ Výuka ZS 2005/06 2. ročník
- ↳ Předměty informační bezpečnosti
- ↳ Předměty finanční matematiky
- ↳ Teorie míry a integrálu
- ↳ Numerika
- ↳ Algebra
- ↳ Analýza/kalkulus
- ↳ Matematika obecně
- ↳ Výuka LS 2005/06 2.ročník
- ↳ Základy matematického modelování
- ↳ Finanční management
- ↳ Úvod do optimalizace
- ↳ Numerika
- ↳ Kalkulus
- ↳ Angličtina
- ↳ Diferenciální geometrie
- ↳ Pravděpodobnost a statistika
- ↳ Teorie míry a integrálu II
- ↳ Algebra II
- ↳ Analýza 2b