sed – Stream Editor
download (html, MSWord, příklady (zkoušeno pod Linuxem))
Omlouvám se za úpravu, doufám, že co nejdřív budu mít čas udělat nějaké lidské formátování. Líp to vypadá ve Wordu - stáhněte si to.
Syntaxe
sed [-n] [-e script ] [-f sfile ] [ file ] ...
Přepínače
-e
vložení jednoho příkazu; pokud příkaz obsahuje mezeru, nutno dát douvozovek (‘,”)
-f
jméno souboru s příkazy (skriptu)-n
potlačení standardního výstupu (výpis jen příkazy p a w)file
zadání vstupních souborů (standardně stdin)Přepínače e a f lze libovolně kombinovat, vstupních souborů může být uvedeno několik.
Popis
Program cyklicky kopíruje řádky ze vstupu do bufferu, provede příkazy zadané v souboru či za přepínačem
e, zkopíruje buffer do stdout a vymaže ho. Program též používá pomocný buffer – hold space.Skript
Obsahuje příkazy, oddělovačem nový řádek. Při provádění skriptu program načte řádek do bufferu, postupně provede uvedené příkazy a na konci skriptu vypíše obsah bufferu na výstup.
Příkazy
c, d, D mění standardní provádění – po jejich provedení se začne skript provádět od začátku (a načte se tedy i nový řádek), příkazy n, N načítají samy řádky.Formát
[adresa [, adresa] ] funkce [argumenty]
adresa
čísla řádků, ke kterým se příkaz vztahuje nebo /regulární výraz/ vybírající řádek, kde:
. - libovolný znak
\n – nový řádek
(jinak standardní regulární výraz)
číslováno od 1, $ - poslední řádek, při více vstupních souborech se čísluje stále vzestupně
bez adresy – příkaz se provede pro každý řádek
dvě adresy - interval řádků
! před funkcí - negace adresy (výběru)
Funkce
v popisu je v závorce uveden maximální počet adres u příkazu. Parametrem v uvozovkách může být libovolný řetězec, oddělovačem od příkazu je mezera. Parametr text má speciální formát – může být víceřádkový, všechny řádky až na poslední musí být ukončeny \. Text však musí být až na dalším řádku za příkazem, tedy formát vypadá asi takto:
i\
libovolný text\
…\
poslední řádek
p (další příkaz)
Následuje seznam funkcí:
! "command" (2)
negace adresy – příkaz se provede, pokud adresa nevyhovuje aktuálnímu řádku
{ (2)
začátek bloku příkazů pro danou adresu, příkazy opět každý na své řádce
} (0)
konec bloku příkazů
: "návěští" (0)
cíl skoků b a t příkazů
b "návěští" (2)
branch – skok na řádek s návěštím (bez návěští – skok na konec skriptu)
t "návěští" (2)
branch-on-test - skok, pokud byl na od posledního načtení vstupu nebo příkazu t či T bylo provedeno nějaké nahrazení příkazem s
q (1)
quit – skok na konec scriptu, bez nového cyklu – výpis bufferu a ukončení provádění programu
= (1)
výpis čísla řádku na výstup a odřádkování výstupu
p (2)
výpis bufferu na výstup
P (2)
výpis prvního řádku bufferu na výstup
l (2)
list – výpis řádku na výstup s nahrazením oddělovačů (tabulátor - \t, …)
s/regulární výraz/replacement/flags (2)
nahrazování řetězců – pokud část bufferu odpovídá reg. výrazu, je nahrazena řetězcem replacement
replacement:
& - vybraný regulární výraz
\i – i-tý podvýraz, kde i nezáporné celé číslo
% - použití replacementu z předchozího příkazu s (nutno bez dalších znaků)
flags: g – nahrazení všech výskytů výrazu v bufferu (standardně jen první)
p – výpis bufferu po provedení nahrazení (pokud bylo provedeno)
w [”wfile”] – jako p, ale do souboru (neuveden – stdout)
y/string1/string2/ (2)
translate – náhrada všech výskytů znaků z prvního řetězce odpovídajícím znakem v druhém řetězci
a "text" (1)
append – výpis textu na výstup před čtením další řádky
i "text" (1)
insert – výpis textu na výstup
c "text" (2)
change – smazání obsahu bufferu, výpis textu (ne uvnitř intervalu adres) a nový cyklus
r "rfile" (1)
načtení obsahu souboru a jeho výpis před načtením nového řádku
w "wfile" (2)
write – append bufferu k souboru wfile; do jednoho souboru může zapisovat jen jeden příkaz!!!
W "wfile" (2)
append prvního řádku bufferu k souboru wfile
g (2)
přepsání bufferu obsahem hold space
G (2)
přidání obsahu hold space k bufferu
h (2)
zkopírování bufferu do hold space
H (2)
append kopie bufferu do hold space
x (2)
exchange – výměna obsahu bufferu a hold space
d (2)
delete – smazání bufferu a nový cyklus
D (2)
delete line – smazání prvního řádku z bufferu (do \0) a nový cyklus
n (2)
zkopírování bufferu na výstup a načtení nové řádky
N (2)
append nové řádky ze vstupu do bufferu, vložení \n; změna čísla řádku
Regulární výrazy
[znaky]
jeden ze znaků, a-z - interval, ^znaky - negace^ začátek řádku (nutno první znak výrazu) - zarovnání následujících znaků
$
konec řádku (nutno poslední znak výrazu)\(rv\)
podvýraz (před závorkami escape charakter \)*
0.. opakování předchozího znaku (podvýrazu)\{n,m\}
n-m opakovaní předchozího znaku (podvýrazu)\{n,\}
minimálně n opakování\{n\}
přesně n opakování\<
následující znak musí být na začátku slova\>
na konci slova\`
začátek řádku (znak)\'
konec řádku (znak)\?
možnost vynechání předchozího znaku (na začátku znamená ?)\+
opakování předchozího znaku 1..\b
začátek či konec slova (jako \<, ale \b\b je prázdný řetězec)\B
vnitřek slova (prázdný rětězec)\w
libovolný znak ve slově\W
libovolný znak mimo slovo (mezera, …)