1 / 28

Úvod do UNIXu ( 4 th round)

Úvod do UNIXu ( 4 th round). David Hoksza (většina sekce o vi a obr ázek na slidu 7 převzat od Libora Forsta – http://www.ms.mff.cuni.cz/~forst/) david.hoksza@mff.cuni.cz. standardn í vstup /v ýstup.

laird
Download Presentation

Úvod do UNIXu ( 4 th round)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Úvod do UNIXu (4th round) David Hoksza (většina sekce o vi a obrázek na slidu 7 převzat od Libora Forsta – http://www.ms.mff.cuni.cz/~forst/) david.hoksza@mff.cuni.cz

  2. standardní vstup/výstup • standardní IO jsou reprezentovány standardními deskriptory souborů (file descriptor), s kterými by měly programy operovat • /dev/tty*, /dev/console, /dev/pts/* • stdin - 0 (klávesnice), stdout - 1 (obrazovka), stderr -2 (obrazovka) • lze přesměrovat • odfiltrování chybových hlášek • ukládání dlouhého výstupu do souboru • potlačení libovolného výstupu • předpřipravení vstupu do souboru

  3. přesměrování • > • přesměruje standardní výstup • ls –l > dir_ouput.txt • echo “abcd” > /dev/pts/1 • echo “abcd” >/dev/null • >> • při existenci souboru bude proveden append • < • přesměruje standardní vstup • wc –l < /etc/passwd • program < input > output • lze definovat odkuď kam přesměrovávat • make > build_msg 2> error_msg • make > build_msg 2>&1

  4. roury • vstupy a výstupy programů lze řetězit za pomoci roury (pipe) • program1 | program 2 | program 3 |… • cat etc/passwd | tail - 10 | tr ‘[:lower:]’ ‘[:upper:]’ | cut –d: -f1

  5. Úkol • Jaký je rozdíl mezi • cat file >log 2>&1 • cat file 2>&1>log • Vypište do souboru všechny uživatele systému setříděné podle abecedy odzadu a k nim jejich skupiny oddělené od sebe tabulátorem (asi budete potřebovat alespoň jeden mezisoubor) • Setřiďte na obrazovku soubory v /etc (ne v podadresářích) od souboru s největším počtem řádku k souboru s nejmenším počtem řádků a na výstup vydejte dvojici s informací o jméně a počtu řádek • Viz. předchozí, ale vypište pouze jména souborů • Viz. předchozí, ale vypište pouze první třiVypište všechny uživatele systému velkými písmeny do souboru a obsahuje-li název písmena, tak je nahraďte za tečky a vypisujte pouze neduplicitní řádky • Najděte způsob pro vyprázdnění souboru s tím, že soubor musí zůstat zachována (použijte /dev/null)

  6. Editor vi • Visual editor • vi [options] [filename] • -R • read-only (přepisuje pouze je-li “přinucen”) • +[N] • kurzor bude umístěn na N.tý řádek (poslední – není-li N zadáno) • +/pattern • kurzor bude umístěn na první výskyt vzoru

  7. Editor vi – schéma práce příkazový režim i, a, I, A, o, O, s, S, cx, C, R : <LF>, <Bkspc> <ESC>, (^C) režim vstupu režim příkazů ex ZZ (:)q, (:)x

  8. Editor vi - pohyb • šipky, pgDown, pgUP • nemusí fungovat na všech systémech a vzdálených konzolích!!! • [N]k,[N]j • posun o Nřádek nahoru/dolu • [N]l, [N]h • posun o N znaků dopředu/dozadu • [N]G • posun na N-tou (poslední) řádku • [N]H • posun na N-tou (první) řádku na obrazovce • [N]L • posun na N-tou (poslední) řádku na obrazovce od konce • mZ • označení pozice znakem Z • ´Z, `Z • skok na místo/začátek řádku pozice Z • ´´, ``, • skok na místo/začátek řádku poslední pozice

  9. Editor vi – přechod do vstupu • i, a, I, A • zahájení editace před/za kurzor/řádku (insert, append) • R • zahájení editace v replace módu • o, O • zahájení editace po vložení řádky před/za aktuální řádku • cc, C • zahájení editace po smazání řádky/do konce řádku • s, S • zahájení editace po smazání znaku/řádku

  10. Editor vi – mazání a práce s buffery • x, X • smazání textu pod/před kurzorem • dd, D • smazání řádky/do konce řádky • smazaný text se ukládá do očíslovaných bufferů • [N]pP • vložení N (jednoho) opakování bufferu před/za kurozor • “np, “nP • vložení n-tého posledního bufferu • [“Z]ym • vložení textu od kurzoru do místa daného příkazem pro pohyb h do bufferu (pojmenovaného Z) • [“Z]yy • vložení řádky do bufferu (pojmenovaného Z) • “Zp, “ZP • vložení bufferu pojmenovaného Z

  11. Editor vi – další příkazy • . • opakování posledního příkazu • u • zruší poslední příkazy • J • spojení řádek • ~ • zamění velké<->malé písmeno pod kurzorem • rZ • změní znak pod kurzorem za Z • z<LF>, z- • posunutí aktuální řádky nahoru/dolu • Ctrl+g • info o poloze a stavu editovaného souboru • % • skok na odpovídající závorku

  12. Editor vi – hledání a nahrazení • /pattern • nalezení vzoru – reguárního výrazu (pohyb pomocí n) • /s/a/b/ • nahradit výskyt a za b • /s/a/b/g • nahradit každý (g = global)výskyt a za b • /s/a/b/g • nahradit každý (g = global)výskyt a za b a každý potvrdit (c = confirmation)

  13. Editor vi - ukončení • :q[!] • ukončení bez uložení • byli-li provedeny změny, pak ! vynutí ukončení bez otázek • :x[!][file_name] • ukončení s uložením • byli-li provedeny změny při read-only, pak ! vynutí ukončení • :w[!][file_name] • uložení • byli-li provedeny změny při read-only, pak ! vynutí uložení

  14. grep, egrep • Vyhledání regulárního výrazu v řádcích • e(xtended)grep umožňuje použití rozšířených regulárních výrazů • [e]grep[options] file1 [file2, …] • -E • egrep • -e pattern • pattern je hledaný regulární výraz • -n • před každou řádku její pořadové číslo • -r • adresáře rekurzivně • -w • shoda musí být celé slovo • -v • invert – vyhledá řádky neobsahující slovo vyhovující podmínce • -x • vyhledá řádky které přesně (jako celek) vyhovují podmínce

  15. Regulární výrazy • vyhledávání výrazů odpovídajících vzoru • lehká podobnost s * a ? z DOSu • vyhledávání s použitím metaznaků, kvantifikátorů, hranic, množin znaků, …

  16. RV – jednoduché vyhledávání • z • vyhledání výskytů znaku z • abcd • vyhledání výskytů zřetězení znaků a, b, c, d • . • zástupný znak za libovolný znak • [z1z2z3z3] • vyhovuje výskyt libovolného znaku z uvedené množiny • [^z1z2z3z3] • vyhovuje výskyt libovolného znaku různého od znaků z uvedené množiny • [a-zA-Z] • vyhovuje libovolnému znaku z rozsahu a-z nebo A-Z • \z • deaktivuje speciální význam znaku z (například tečky) • | • operátor nebo • pattern1(pattern2|pattern3) pattern4 • () jsou operátorem “přednosti” • [][]

  17. RV - skupiny znaků • \d • číslice 0-9 • \D • jakýkoliv znak kromě číslic 0-9 • \w • znaky „slova” (ekvivalentní zápisu [a-zA-Z0-9]) • \W • jakýkoliv znak kromě znaků „slova” (ekvivalentní zápisu [^a-zA-Z0-9]) • \s • „bílé” znaky (mezera, tabulátor, znaky pro zalomení řádků) • \S • jakýkoliv znak kromě „bílých” znaků • [:alnum:] • alfanumerický znak (použití grep “\”[[:alnum:]]\”” file) • [:space:] • mezera • [:digit:] • číslice

  18. RV - kvantifikátory • * • minimálně 0krát (maximálně neomezeno) • [\]? • minimálně 0krát, maximálně 1krát • [\]+ • minimálně 1krát (maximálně neomezeno) • [\]{n [\]} • právě nkrát • [\]{m,n [\]} • minimálně mkrát, maximálně nkrát • [\]{m, [\]} • minimálně mkrát (maximálně neomezeno) • kvantifikátory jsou hladové (zachytí maximální možnou odpovídající sekvenci) • někdy lze nastavit líné vyhodnocování použitím otazníku za opakováním • x.+?x • jistější • x[^x]+x

  19. Příklady (jednoduché) • cat|dog|mouse|fish •  colou?r • colour, color • Set(Value)? • Set, SetValue • ca*t • ct, cat, caat, caaat, ca…….at • a\.*z • az, a.z, a..z, a….z, a. …. .z • a\+\+z • a++z • ab{3,5}c • abbbc, abbbbc, abbbbbc • .{3,5}pentane • cyclopentane, isopentane, neopentane • \s[cmt]an\s • can, man , tan • a[1-4-]z • a1z, a2z, a3z, a4z, a-z

  20. RV – výrazy a jejich opakování • [\](pattern[\]) • uložení patternu do bufferu • \N • použití N-tého bufferu • (abcd)x(ab)\1y\2 • ([0-9]{2,4})\.([0-9]{5})xxx\1\*\2

  21. RV - hranice • ^ • začátek řádku • $ • konec řádku • \b • začátek nebo konec slova • \< • začátek slova • \> • konec slova

  22. Příklady • Nalezení emailových adres na řádce • ^[A-Za-z0-9._-]+@[A-Za-z0-9.-]+$ • Nalezení dosovských cest k programům • [A-Z]:(\\[A-Z0-9_]+)+ • Nalezení reálných čísel • (\+|-)?[1-9][0-9]*(\.[0-9]*)? • Nalezení HTML tagů • <([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1>

  23. Úkol • vytvořte textový soubor kde v obsahu bude mimo jiné “x+y=(23*5)” a vytvořte regulární výraz, který najde právě tento výraz • Co je nalezeno výrazem [[]] ? • Vyhledejte všechny čísla v textu • Vyhledejte v textu všechna rodná čísla. • Vyhledejte v textu všechny výskyty IP adres. • Vylepšete příklad s vyhledáním emailových adres, aby rozpoznával v části za @ formát xxx.yyyy (yyyy jsou 2-4 znaky)

  24. sed (1) • stream editor • čte vstupní proud (defaultně po řádcích) a transformuje ho pomocí regulárních výrazů na výstupní • sed format_str file1 [file2 …] • sed –r • rozšířené regulární výrazy

  25. sed (2) • sed ‘s/pat1/pat2/’ file • nahradí první výskyt na řádce pat1 za pat2 • sed ‘s/[0-9][0-9]*/_/’ file • sed "s/function\s* \b\([a-z]*\)\b/#function \1\nfunction \1/g" *.c • sed ‘s/pat1/pat2/g’ file • dtto golbálně (na všechny výskyty) • sed 's/\([a-z]*\)\1/\1/g' • sed -n ‘s/pat1/pat2/p’ file • -n … na výstup nejdou žádné nové řádky • vypisuje pouze řádky obsahující pat1 (zasubstitovanou pat2) • sed ‘s/pat1/pat2/w wfile’ file • dtto do souboru wfile • akce lze kombinovat • sed –n ‘s/pat1/pat2/gw wfile’ file

  26. sed (3) • složení příkazů • sed -e 's/a/A/' -e 's/b/B/' file • smazání řádky s výrazem • sed ‘/pat/ d’ file • obecně lze • sed ‘/pat/ action’ file • přidání řádky před/za/místořádky s výrazem • sed ‘/pat/ i new line text’ file • sed ‘/pat/ a new line text’ file • sed ‘/pat/ c new line text’ file

  27. sed (4) – omezení řádků • omezení na 1 řádku • sed “14 s/pat1/pat2/” file • omezení na množinu řádku • sed “4,100 s/pat1/pat2/g” file • omezení řádek výrazy • sed “/start/,/stop/ s/pat1/pat2/” file • sed “/start/,/stop/ d” file • transforamce • sed '/\d\d*/ y/abc/ABC' file

  28. Úkol • Nahraďte všechny výskyty slova black za white • Smažte první 2 řádky souboru • Smažte jednořádkové C komentáře (začínají // a pokračují do konce řádku) • Viz. předchozí, ale pokud komentář začína na začátku řádky, tak také smazat danou řádku (tj. po minulém příkladě můžou zbýt prázdné řádky a tyto odstranit) • Vypište do souboru sudy řádky souboru začínající na sudé číslo

More Related