sed

folyamszerkesztő

HASZNÁLAT

sed [ -an ] parancs [fájl ...]
sed [ -an ] [ -e parancs ] [ -f parancsfájl ] [fájl ...]

LEÍRÁS

A sed segédprogram a megadott fájlokat dolgozza fel, vagy ha nincsenek fájlok megadva, akkor a standard bemenetről érkező adatokat. A bemenetet tartalmát a parancslista szerint módosítja. A bemenetet a standard kimenetre írja.

Egy önálló parancsot első argumentumként adhatunk meg a sed-nek. Több parancsot az -e vagy az -f kapcsolók használatával adhatunk meg. Minden parancs a megadási sorrend szerint hajtódik végre a bemeneten, kezdetüktől függetlenül.

A következő kapcsolók állnak rendelkezésre:

-a
A "w" funkciók számára argumentumokként megadott fájlok feldolgozás előtt alapértelmezés szerint létrejönnek (vagy csonkulnak). Az -a kapcsoló hatására a sed minden fájl megnyitása előtt addig vár, amíg az idevágó "w" funkciót tartalmazó parancs végre nem hajtódik a bemenet adott során.
-e parancs
A parancs argumentumban meghatározott szerkesztő parancsokat hozzáfuzi a parancsok listájához.
-f parancsfájl
A parancsfájl-ban található szerkesztő parancsokat hozzáfuzi a parancsok listájához. Minden egyes szerkesztő parancsnak kulön sorban kell lennie.
-n
Alapértelmezés szerint a bemenet minden sora a kimenetre íródik, miután minden parancs végrehajtódott rajta. Az -n kapcsoló elnyomja ezt a viselkedést.

Egy sed parancs formája a következő:

[cím[,cím]]funkció[argumentumok]

A parancs első címrésze és a funkciórészek elé szóközöket lehet beszúrni.

A sed normális esetben ciklikusan bemásolja az input adott sorát egy "mintaterület"-re, a végén lévő újsor-karakter nélkul, (kivéve, ha egy "D" funkció után maradt még valami), végrehajt minden parancsot, amelyek arra a mintaterületre vonatkoznak, a mintaterületet a standard kimenetre másolja, hozzáfuzve egy újsor-karaktert, majd törli a mintaterület.

Néhány funkció egy "raktárterület"-et használ, ahova a mintaterület egy részét vagy egészét későbbi visszaállítás érdekében elmenti.

Sed címek

Egy címet nem kell feltétlenül megadni, de ha meg van adva, akkor számnak kell lennie (ami a bemeneti fájlok egy-egy azonos sorszámú sorát jelzi), vagy egy dollár ( "$" ) karakternek, ami a bemenet utolsó sorát címzi meg; vagy egy szövegvonatkozású címnek (amely egy reguláris kifejezésből áll, határolójelek között).

A cím nélküli parancssor minden mintaterületre érvényes.

Az egy címet tartalmazó parancssor azokat a mintaterületeket választja ki, amelyek egyeznek a címmel.

Az a parancssor, amelyik két címet tartalmaz, az első címmel egyező mintaterülettől a második címmel egyező, első utáni mintaterületig terjedő zárt intervallumra érvényes. (Ha a második cím kisebb vagy egyenlő, mint az először kiválasztott sorszám, akkor csak az a sor lesz kiválasztva.) A kiválasztott tartományt követő első sortól kezdve a sed ismét az első címet kezdi keresni.

Olyan szerkesztő parancsok, amelyek a nem kiválasztott mintaterületekre hatnak, a felkiáltójel-funkció ( "!" ) segítségével adhatók meg.

Sed reguláris kifejezések

A sed reguláris kifejezések alapvető reguláris kifejezések (ARK-k, lásd regex (3) további információkért). Ezenfelül a sed a következő két dologgal bővült az ARK-hoz képest:

  1. A címzésben, bármely backslash ( "\" ) -től különböző karakter vagy újsor karakter használható a reguláris kifejezés meghatározására. Továbbá egy backslash karaktert téve a körülhatároló karakter elé a karakter betu szerint való értelmezéséhez vezet. Például a \xabc\xdefx címzésben a körülhatároló karakter egy "x", és a második "x" saját magát képviseli, így a reguláris kifejezés: "abcxdef".
  2. A \n escape szekvencia megfelel egy újsor karakternek a mintaterületben. Viszont nem használhatunk újsor karaktert betu szerint egy címzésben vagy helyettesítő parancsban.

A sed reguláris kifejezések egy speciális tulajdonsága, hogy alapértelmezés szerint a legutoljára használt reguláris kifejezést használják. Amennyiben egy reguláris kifejezés üres, azaz csak a határoló karakterek adottak, a legutólsóként tapasztalt reguláris kifejezés használtatik. Az utolsó reguláris kifejezés: az utolsó olyan reguláris kifejezés, amelyet címzés vagy helyettesítő parancs részeként használtunk, de futási idő szerint utoljára, nem pedig lefordítási időrendben. Például a "/abc/s//XXX/" parancs az "XXX"-et fogja helyettesíteni az "abc" mintába.

Sed funkciók

A következő parancslistában a parancsok maximális megengedhető címszáma [0cím],[1cím],vagy [2cím]-mel lesz jelölve, aszerint, hogy nulla, egy vagy két címet engednek meg.

A szöveg argumentum egy vagy több sorból állhat. Amennyiben a szövegbe újsort akarunk ágyazni, előzze meg egy backslash. A többi backslash törlődik és az utánuk következő karakterek betu szerint értelmeződnek.

Az "r" és "w" funkciók egy opcionális file paraméterrel bővülnek, amelyet a funkció betujétől egy szóköznek kell elválasztania. A sed minden argumentumként adott file-t létrehoz (vagy a meglévő tartalmát csonkítja) mielőtt bármilyen adatfeldolgozás kezdetét venné.

A "b" , "r" , "s" , "t" , "w" , "y" , "!" , és a ":" funkciók elfogadnak újabb argumentumot. A következő vázlatok megmutatják, melyik argumentumokat kell a funkciók betüjétől szóközzel elválasztani.

Két funkció tesz ki egy függvény listát. Ez pedig egy newline-okkal elválasztott sed funkciólista:

{ funkció
  funkció
  ...
  funkció
}

A "{" -et megelőzheti, illetve követheti szóköz. A funkciót megelőzheti szóköz. A lezáró "}" -et újsornak vagy opcionálisan egy szóköznek kell megelőznie.

[2cím] function-list
Csak akkor hajt végre funkció listát, ha a mintaterület ki van választva.
[1cím]a\
 
szöveg
 
A szöveg -et a standard kimenetre írja, közvetlenül minden egyes, a bemenetről történő 1 sornyi olvasás előtt, akár az "N" funkció végrehajtásakor, vagy egy új ciklus kezdetén.
[2cím]b[címzés]
Elkezdi a ":" funkciót a megadott címzéssel. Ha a címzés nem adott, a script végére áll.
[2cím]c\
 
szöveg
 
Törli a mintaterületet. 0 vagy 1 cím esetén, illetve egy 2 címes utasítás végén a szöveg-et a standard kimenetre írja.
[2cím]d
Törli a mintaterületet és kezdi a következő ciklust.
[2cím]D
Törli a mintaterület kezdő, első újsorig tartó szeletét, és elkezdi a következő ciklust.
[2cím]g
Kicseréli a mintaterület tartalmát a tárolóterület tartalmával.
[2cím]G
A mintaterülethez hozzáfuz egy újsort, majd a raktárterület tartalmát.
[2cím]h
Kicseréli a raktárterület tartalmát a mintaterület tartalmával.
[2cím]H
A raktárterülethez hozzáfuz egy újsort, majd a mintaterület tartalmát.
[1cím]i\
 
szöveg
 
Kiírja a szöveg-et a standard kimenetre.
[2cím]l
(Az "ell" betu.) Kiírja a mintaterületet a standard kimenetre egy egyértelmu ábrázolási formában. Ez a forma a következőképpen néz ki:
          backslash        \
          sürgős           \a
          lapdobás         \f
          újsor            \n
          kocsivissza      \r
          tab              \t
          függőleges tab   \v

A megjeleníthetetlen karaktereket három számjegyen, oktális számként ábrázolja (egy backslash-sel a szám minden byte-ja előtt; a legfontosabb byte áll elöl). A hosszú sorokat betördeli, a töréspontot egy backslash után álló újsorral jelöli. Minden egyes sor végére "$" kerül.

[2cím]n
Kiírja a mintaterület tartalmát a standard kimenetre - ha az alapértelmezés szerinti kimenetet nem lett felülbírálva -, és kicseréli a munkaterületet a bemenet következő sorával.
[2cím]N
A bemenet következő sorát hozzáfuzi a mintaterülethez. Ez utóbbi eredeti tartalmát egy újsor karakterrel választja el a hozzáfuzött anyagtól. Érdemes megjegyezni, hogy az aktuális sorszám megváltozik.
[2cím]p
Kiírja a mintaterületet a standard kimenetre.
[2cím]P
Az első újsor karakterrel bezárólag kiírja a mintaterületet a standard kimenetre.
[1cím]q
Elugrik a script végére és új ciklus indítása nélkül befejezi tevékenységét.
[1cím]r file
Azonnal bemásolja a file tartalmát a standard kimenetre, még mielőtt megkísérelné beolvasni a következő sort az input-ról. Ha a file valamiért nem olvasható, akkor egyszeruen figyelmen kívül hagyja, és nem ad hibajelzést (a visszatérési kódban sem).
[2cím]s/reguláris kifejezés/csereszöveg/jelzők

A reguláris kifejezés első mintaterületbeli előfordulását helyettesíti a csereszöveggel. Minden backslash-től és újsortól eltérő karakter használható a perjel helyett a regkif. és a csereszöveg elválasztására. Maga az elválasztó karakter használható önmaga jelölésére a regkif.-en és a csereszövegen belül, ha előtte egy backslash áll.

A csereszövegben szerepelő minden egyes "et" karakter ( "&" ) helyére az a kifejezés kerül, amire a reguláris kifejezés éppen ráillik. Az "&" különleges jelentése elnyomható, ha egy backslash kerül elé. A "\#" string helyére, ahol "#" egy számjegy, az a szöveg kerül, amelyre a megfelelő visszahivatkozó kifejezés ráillik. (lásd re_format (7)).

Egy sort ketté lehet vágni azáltal, hogy egy újsor karaktert helyettesítünk bele. Egy újsor csereszövegbeli megadásához írjunk elé egy backslash-t.

A jelzők értéke a helyettesítési funkcióban vagy üres, vagy a következők közül valahány:

0 ... 9
A cserét a reguláris kifejezésnek csak a mintaterületen belüli N-edik elofordulására hajtja végre.
g
A cserét a reguláris kifejezés összes nem átfedo illeszkedésére hajtja végre, nem csak az elso elofordulására.
p
A mintaterületet - ha történt csere - kiírja a standard kimenetre. Egy csere akkor is cserének minosül, ha az eredménye megegyezik a kiindulási karakterlánccal.
w fájl
A mintaterületet - ha történt csere - a fájl-hoz csatolja. Egy csere akkor is cserének minosül, ha az eredménye megegyezik a kiindulási karakterlánccal.
[2cím]t [címke]
Ha történt helyettesítés az utolsó sor beolvasása, vagy az utolsó "t" utasítás végrehajtása óta, akkor a címke által meghatározott utasításra ugrik. Ha nincs címke megadva, a script végére ugrik.
[2cím]w fájl
A mintaterületet a fájl végéhez fuzi.
[2cím]x
Kicseréli a minta tartalmát, és megorzi a szóközöket.
[2cím]y/string1/string2/
Kicseréli mintaterületen belül az összes string1 beli karaktert a megfelelo string2 beli karakterre. A "/" jel helyett bármilyen más karakter használható a string-ek elválasztására, kivéve a "\" jelet és az újsor karaktert. String1-ben és string2-ben egy "\" jel és egy ot követo bármilyen újsortól különbözo k karakter jelentése egy újsor karakter, ha k egy "n" betu, egyébként pedig maga a k karakter.
[2cím]!funkció
 
[2cím]!funkció-lista
A funkciót vagy a funkció-listát csak azokra a sorokra alkalmazza, amelyeket a címek nem jelölnek ki.
[0cím]:címke
Ez a funkció nem csinál semmit, csak definiál egy cimkét, amire a "b" illetve "t" parancsok ugorhatnak.
[1cím]=
Kiírja a sor számát és egy újsor karaktert a standard kimenetre.
[0cím]
Az üres sorokat a sed nem veszi figyelembe.
[0cím]#
A sed a "#" jelet és a sor hátra lévo részét nem veszi figyelembe (megjegyzésként kezeli), azzal az egy kivétellel, hogy ha a fájl elso két karaktere "#n", akkor ez letiltja a kimenetet. Ugyanez a hatás elérheto a -n kapcsoló megadásával a parancssorban.

A sed parancs visszatérési értéke 0, ha a muvelet sikeres volt, illetve >0, ha hiba történt.

LÁSD MÉG

awk (1) ,
ed (1) ,
grep (1) ,
regex (3) ,
re_format (7)

TÖRTÉNET

A sed parancs az AT&T UNIX 7-es verziójában jelent meg.

SZABVÁNYOK

A sed parancs az IEEE Std. (POSIX) 1003.2 szabvány részét képezi.