Úvod do UNIXu 2016/2017

0  1  2  3  4  5  6  7  8  9  10  11  12 

Cvičení VI

  1. Úkol z minulé hodiny
  2. Stáhněte si http://norvig.com/big.txt
  3. Spočítejte ve staženém souboru počet výskytů výrazu bez použití grepu.
    • >count
      while read line; do
      for word in $line; do
      [[ $word =~ .*$expr.* ]] && echo 1 >> count
      done
      done < file
      wc -l < count
  4. Vypište ze souboru všechna slova skládající se pouze ze samohlásek.
    • while read line; do
      for word in $line; do
      [[ $word =~ ^[aeiouyAEIOUY]+$ ]] && echo $word
      done
      done < file
  5. Najděte výskyty řetězce začínajícího libovolným počtem "a" následovaným znakem "b"
    • grep -Eo "(\W|\s|^)a*b"
  6. Najděte v souboru všechny letopočty mezi lety 1820 - 1870.
    • grep -Eo "18([2-7]0|[2-6][0-9])"
  7. Napište příkaz, který vypíše všechny soubory nebo adresáře, které mají ve jménu podřetězec 'bin' v podstromu aktuálního adresáře.
  8. Napište příkaz, který vypíše počet všech adresářů v podstromu /etc.
  9. Vypište všechny symbolické linky z adresáře /etc, nezahrnujte celý podstrom, jen to, co je přímo v adresáři /etc.
  10. Z podstromu adresáře /usr/bin vypište soubory, na které ukazují alespoň tři hardlinky.
  11. V podstromu adresáře /tmp najděte všechny soubory, které jsou větší než sto kilobyte a jsou čitelné pro všechny.
  12. V podstromu adresáře /usr/include najděte soubory, které jsou v podstromu adresářů v hloubce alespoň 2 a nejvýš 3.
  13. V adresáři /etc najděte soubory, které jsou novější než /etc/passwd.
  14. V podstromu adresáře /bin najděte soubory, které vlastní root a jsou spustitelné jen pro vlastníka a členy skupiny, nikoli pro ostatní.
  15. V adresáři /etc najděte soubory, které patří skupině stunnel a pro každý vypište dlouhé informace pomocí ls -l.
  16. Vypište dlouhý výpis adresářů obsažených v $PATH, lépe řečeno dlouhé informace o nich, ne jejich obsah.
  17. Rozdělte soubor /etc/passwd na části po pěti řádcích a potom tyto části poskládejte v opačném pořadí do jiného souboru, (to jest nejprve jde posledních pět řádků v pořadí jako v /etc/passwd, potom předposledních pět atd.)
  18. Zjistěte, ve kterých adresářích uložených v proměnné $PATH se vyskytuje program awk.

Dnešní témata

a) (1 bod) Napište regulární výraz, který namatchuje platnou URL adresu (zjednodušeně), tj.: "proto://domain.name.com/what-ever/so/on/4/file.php" Pozor, nestačí použít \w

    • \w+://(\w+\.)*\w+\.\w{2,4}((/(\w|[~-])+)*(/\w+\.\w+))?
b) (2 body) Vytvořte skript, který dostane soubor, oddělovač a zbylé parametry jsou čísla, která udávají pořadí polí. Počet polí je předem neznámý. Soubor přepište tak, aby v něm byla pole seřazená podle permutace na vstupu.

    • file=$1
      sep=$2
      shift 2
      substitution=
      regex=
      while [ $# -gt 1 ];do
      substitution="$substitution\\$1$sep"
      regex="$regex([^$sep]*)$sep"
      shift
      done
      regex="$regex(.*)'
      substitution="$substitution\\$1"
      cat $soubor | sed "s/$regex/$substitution/"