Zpracování textu v UNIXovém shellu a regulární výrazy#
Materiály#
Zadání úlohy#
Vytvořte BASH skript (soubor s příponou .sh), který bude používat
UNIXové nástroje pro práci s textem a regulární výrazy ke čtyřem
různým úlohám, které si uživatel zvolí přepínači -a až -d:
-
-avypíše na standardní výstup všechny soubory JPG a PNG z aktuálního adresáře. Poznáte je podle přípony.jpgnebo.pnga na velikosti písmen nezáleží. Každý soubor bude na samostatném řádku a řádky budou řazeny podle abecedy. -
-bpřečte text ze standardního vstupu a vypíše na standardní výstup všechny řádky začínající písmenem, dále pokračující celým číslem následovaným stejným písmenem jako na začátku řádky. Na výstupu se objeví vybrané řádky bez čísla a dvou okolních písmen. Uvažujte pouze celá čísla v dekadickém zápisu, která mohou začínat znaménkem+či-. Případné desetinné tečky/čárky se nepovažují za součást čísla.Příklad: Následující řádka
x2026x HellovypíšeHello. -
-cpřečte text ze standardního vstupu a najde v něm všechna telefonní čísla ve tvaru+420 xxx xxx xxx, tedy telefonní číslo s českou předvolbou obsahující 9 cifer. Mezery mezi trojicemi cifer jsou volitelné, na jiném místě se mezery nesmí vyskytovat. Telefonní číslo se může nacházet na více řádcích. -
-d <prefix>(nepovinné) přečte text na standardním vstupu, najde v něm text ve tvaru(file:soubor)a změní jej na text(file:<prefix>soubor).Například pro
-d lib/bude(file:foo.h)změněno na(file:lib/foo.h). Předpokládejte, že text<prefix>nebude obsahovat znaky|\.
Při řešení můžete vyjít z následující šablony:
#!/usr/bin/env bash
set -euo pipefail
print_help() {
echo >&2 "Pouziti skriptu:"
echo >&2 "$(basename "$0") -h | -a | -b | -c | -d <prefix>"
exit 1
}
while getopts ":habcd:" opt; do
case $opt in
h|:|\?)
print_help
;;
a) ls -1a | ...
;;
b) sed ...
;;
c) ...
;;
d) prefix=$OPTARG
sed ...
;;
esac
exit 0
done
print_helpDomácí příprava na další cvičení#
Předpokládáme, že máte základní znalosti jazyka C a víte, jak funguje překlad ze zdrojových kódů jazyka C do binární spustitelné aplikace (v obecném případě, kdy je zdrojových souborů více).
Dále byste měli umět použít překladač gcc včetně jeho základních
přepínačů a také byste měli znát nástroj make pro
automatizaci překladu programů v jazyku C/C++.
Dále je pro absolvování cvičení nutné mít přehled o systémových voláních fork, pipe, dup, open, kill, wait a execve, tzn. měli byste vědět, jak vzniká nový proces a jak lze přesměrovat standardní vstup a výstup. Potřebné informace se dozvíte na některé z předchozích přednášek.