Upload
laird
View
34
Download
0
Embed Size (px)
DESCRIPTION
Ú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/) [email protected]. standardn í vstup /v ýstup. - PowerPoint PPT Presentation
Citation preview
Ú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/)
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
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
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
Úkol
1. Jaký je rozdíl mezi cat file >log 2>&1 cat file 2>&1 >log
2. 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)
3. 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
4. Viz. předchozí, ale vypište pouze jména souborů5. 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
6. Najděte způsob pro vyprázdnění souboru s tím, že soubor musí zůstat zachována (použijte /dev/null)
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
Editor vi – schéma práce
příkazový
režim
příkazový
režim
režim
vstupu
režim
vstupu
režim
příkazů ex
režim
příkazů ex
(:)q, (:)x
ZZ
i, a, I, A,o, O, s, S,cx, C, R
<ESC>,(^C)
<LF>, <Bkspc>
:
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
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
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
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
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)
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í
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
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ů, …
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”
[][]
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
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
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
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
RV - hranice
^ začátek řádku
$ konec řádku
\b začátek nebo konec slova
\< začátek slova
\> konec slova
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>
Úkol
1. 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
2. Co je nalezeno výrazem [[]] ?3. Vyhledejte všechny čísla v textu4. Vyhledejte v textu všechna rodná čísla.5. Vyhledejte v textu všechny výskyty IP adres.6. 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)
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
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
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
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
Úkol
1. Nahraďte všechny výskyty slova black za white2. Smažte první 2 řádky souboru3. Smažte jednořádkové C komentáře (začínají // a
pokračují do konce řádku)4. 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)
5. Vypište do souboru sudy řádky souboru začínající na sudé číslo