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 do

uvozovek (‘,”)

-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, …)