Deváté cvičení – Základy sedu
Jak spustit sed:
sed 'prikaz' [vstupni_soubor1...]
sed -f soubor_s_prikazy [vstupni_soubor1...]
sed -e 'prikazy' -f soubor_s_prikazy [vstupni_soubor1...]
sed -n ... - důležitý přepínač vypínající vypisování řádků (obsahu PS)
Tvar příkazu:
adresa1[,adresa2]prikaz[parametry]
Určení adresy:
- Číslo řádku
$ – poslední řádek
/regex/ – regulární výraz
Příkazy:
Základní příkazy (manipulace s
pattern space):
p (print) vypíše aktuální obsah PS
n (next) načte nový řádek do PS a pokračuje (a pokud není -n, tak i vypíše)
d (delete) smaže PS, načte nový řádek a začne od začátku (tedy podobné n, ale jde od začátku příkazů)
Základní příkazy++ (jejich uppercase verze):
P (Print) vypíše první řádek PS
N (Next) načte a připojí další řádek do PS
D (Delete) smaže první řádek z PS (pokud by se stal prázdným, tak i načte nový) a pokračuje od začátku příkazů
Manipulace s
hold space:
h (hold) kopíruje PS -> HS
H (Hold) připojuje PS -> HS
g (get) kopíruje HS -> PS
G (Get) připojuje HS -> PS
x (exchange) prohazuje PS <-> HS
Vkládání:
i \
text (insert) vlož před aktuální řádek text
a \
text (append) vlož za aktuální řádek text
Další příkazy:
s/.../.../ nahrazení (regulární výraz - viz návod od Stínovlase)
y/.../.../ nahrazení jako tr (množiny znaků)
q konec (a vypsání aktuálního obsahu PS, pokud není -n)
Příklady:
- Vypište ze souboru pouze liché řádky
- Na začátky lichých řádek souboru vložte
+, na začátky sudých -
- Na začátky desáté až dvacáté řádky souboru
/etc/passwd přidejte znak #
- Stáhněte si testovací soubor kapitoly.txt a zkuste:
- Vypište pouze řádky s nadpisem kapitol
- Vypište pouze řádky s nadpisy kapitol a podkapitol
- Obalte každý název kapitoly řádky se znaky
====== (nad a pod)
Napište příkaz sedu, který vypíše řádky na vstupu v opačném pořadí (podobně, jako příkaz tac)
- Stáhněte si ukázkový email s hlavičkami (nebo použijte vlastní) a:
- Vypište pouze tělo emailu (bez hlaviček)
- Vypište pouze hlavičky
From:, To:, Subject: a pak tělo emailu
- Vymyslete sedový skript, který bude odstraňovat komentáře ze shellových souborů:
- Komentáře jsou vše za znakem
#
- Pokud řádek obsahoval jenom komentář (a mezery/tabulátory před ním), tak ho vymažte celý
- Pokud první řádek obsahuje shebang (
#!/...), tak ho tam nechte
*/?>