Regulární výrazy (Regular Expression)

Příklady - vyhledávání

zkopírujte si soubory kalendar.pl, mereni.txt, seznam.txt, seznam4.txt, ls.txt, htm2tex.txt a barva_kouzel.htm z
/usr/html/NMIN266/4/
do
~/NMIN266
  1. spočítejte kolik je v adresáři /bin symbolickych linku
    ls -l /bin | grep ^l | wc –l
    
  2. souboru kalendar.pl nastavte práva tak, aby ho uživatel mohl spouštět spusťte:
    kalendar.pl 2023 a zkontrolujte jestli se vytvořil soubor kalendar2023.html
    ze souboru kalendar.pl vytvořte soubor kal.pl, který bude mít stejný obsah, ale
    nebude obsahovat komentáře (komentář je na řádku, který začíná znakem #)
    grep -v ^\# kalendar.pl > kal.pl
    chmod u+x kal.pl
    
    nastavte kal.pl jako spustitelný a opět vyzkoušejte jestli funguje
    kal.pl 2023
    
    ...proč nefunguje?
    grep -v \#[^\!] kalendar.pl > kal.pl
    chmod u+x kal.pl
    
    znovu zkuste spustit
    kal.pl 2023
    a
    kal.pl 2024
    
    vytvořte si symbolický link na /usr/html/vaše uživatelské jméno s názvem public_html tj.
    cd
    ln -s /usr/html/username ./public_html
    
    soubory kalendar2023.html a kalendar2024.html si zkopírujte do ~/public_html/
    v tomto adresáři nastavte těmto souborům právo pro čtení pro všechny a pak se podívejte na:
    http://www.karlin.mff.cuni.cz/~vase_uzivatelske_jmeno/kalendar2023.html
    resp.
    http://www.karlin.mff.cuni.cz/~vase_uzivatelske_jmeno/kalendar2024.html
  3. najít v souboru phones.txt všechny lidi z karlína (víme, že jejich telefon začíná 32 nebo 33)
    egrep 3\[23\]\[0-9\]\{2\} phones.txt
    
    anebo ve vim
    /3[23][0-9]\{2\}
    
  4. v souboru mereni.txt najít všechna čísla, která jsou uvedena na více než dvě desetinná místa
    egrep \[0-9\]\+\.\[0-9\]\{2,10\} mereni.txt
    
    anebo ve vim
    /[0-9]\+\.[0-9]\{2,10\}
    
  5. v souboru phones.txt najít takové lidi, kteří jsou členy více než jednoho pracoviště (pracoviště je velkými písmeny)
    egrep [A-Z]\{2,7\},\ [A-Z]\{2,7\} phones.txt
    
    anebo ve vim
    \<[A-Z]\+\>\(, \+\<[A-Z]\+\>\)\{1,2\}
    
  6. zjistěte, kolik na mff pracuje lidí jejihž křestní jméno začíná stejnym písmenem jako jejich příjmení
    grep '^\([A-Z]\)[a-z]*, \1' phones.txt
    
    anebo ve vim
    /^\([A-Z]\)[a-z]*, \1
    
  7. v souboru seznam.txt najděte človeka jehož příjmení je totožné s křestním jménem
    grep '^\([A-Z][a-z]*\) \1,' seznam.txt
    
    anebo ve vim
    /^\([A-Z][a-z]*\) \1,
    
  8. v souboru barva_kouzel.htm najít všechny řetězce v uvozovkách (jen vim)
    /".*" 
    
    !! špatně viz.ř. 125
    /"[^"]*"
    
    Vyhledávání i "přes" konec řádku
    /"[^"]*\n[^"]*"
    


RE použité pro zaměňování

(zde už je důležité délka najitého řetězce)
  1. v souboru phones.txt zaměnit všechny výskyty jména Jiri za jiri
    %s/Jiri/jiri/g
    
    to je ale špatně, viz. ř. 722 Jirina ...
    %s/Jiri␣/jiri␣/g
    
    to samé pro sed
    cat phones.txt | sed 's/Jiri␣/jiri␣/g' > ...
    
  2. v souboru phones.txt (Jmeno, Prijmeni ...neco...) zaměnit Jméno a Příjmení
    %s/^\([A-Z][a-z]*\),␣\([A-Z][a-z]*\)\(.*\)/\2,␣\1\3
    
    to samé pro sed
    sed 's/^\([A-Z][a-z]*\),␣\([A-Z][a-z]*\)\(.*\)/\2,␣\1\3/' phones.txt
    
  3. soubor phones.txt upravit tak, aby na prvním místě bylo pracoviště (navíc - pro jednoduchost - to poslední)
    budeme vyhledávat "shluk" velkých písmen - mohl by nám dělat problém titul "RNDr." ... dočasně ho přejmenujeme na "rndr"
    %s/RNDr/rndr/g
    %s/^\(.*\)\([. ]\)\([A-Z]\{2,6\}\)\(.*\)$/\3 \1\2\3\4
    %s/(rndr)/RNDr/
    
    anebo, snadněji (v tomto případě budeme naopak brát - pro jednoduchost - první pracoviště)
    zkratka pracoviště začíná vždy na 49. znaku tedy:
    %s/^\(.\{48\}\)\([A-Z]\{2,6\}\)\(.*\)$/\2 \1\2\3
    
  4. soubor seznam4.txt (ve formátu Jmeno Prijmeni rok) setřiďte podle roku, výsledný formát by měl být stejný jako vstupní
    %s/^\(.*\)␣\([0-9]\{4\}\)$/\2␣\1␣\2
    %! sort
    %s/.....//
    
  5. soubor ls.txt "upravit" aby se dal "rozsekat" za pomoci příkazu cut (tzn. jednu a více mezer zaměnit za ^I - tabelátor)
    %s/ \+/^I/g
    
  6. v souboru htm2tex.txt jsou některá slova zvýrazněna (pomocí HTML syntaxe <B>slovo</B> nebo <b>slovo</b>)
    upravte tento soubor tak, aby tato slova byla zvýrazněna pomocí LaTeXové sekvence \textbf{slovo}
    %s/<[Bb]>\([^<]\+\)<\/[bB]>/\\textbf{\1}/g
    
  7. Zkopírujte si soubor /usr/html/NMIN266/4/soubory do ~/NMIN266 a otevřete si tento soubor ve vim
    zrušte vše od ␣document resp. ␣image až na konec řádku
    :%s/␣[di].*$//
    anebo
    :%s/␣[a-z].*$//
    
    to samé v sed
    sed 's/␣[di].*$//' soubory
    anebo
    sed 's/␣[a-z].*$//' soubory
    
    Vypište jen jména souborů typu soubory typu PDF
    grep PDF soubory | sed 's/:.*$//'
    
  8. Podívejte se na úlohu 1. z 7.3. viz. Cvičení 7.3.2024 - dokážete ji nyní zpracovat ještě efektivněji?