Desá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
- Negace pomocí
!
(například 1!
= všechny řádky vyjma prvního)
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 původní obsah PS)
d
(delete) smaže PS, načte nový řádek a začne od začátku (pozor: narozdíl od n
se vrátí na začátek 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
*/?>