NÉV¶
sed - folyamszerkesztő (stream editor)
ÁTTEKINTÉS¶
sed [-n] [-g] [-e script ] [-f sfile ] [ file ] ...
LEÍRÁS¶
A `sed' program a megnevezett fájlokat (alapértelmezés szerint a
standard bemenetet) a szabványos kimenetre másolja, de közben
egy parancsokat tartalmazó szkriptnek megfelelően megszerkeszti.
A `-e' opció az egyszerű szerkesztést jelenti: a szerkesztő
parancsot a következő argumentumból veszi. Amennyiben több
`-e' is van a parancssorban, megjelenésük sorrendjében hajtja
őket végre. Amennyiben csak egyetlen `-e' opció van és
nincs `-f', a `-e' elhagyható.
A `-f' opció azt eredményezi, hogy a parancsokat az "sfile"
fájlból veszi. Amennyiben több is van belőlük,
megjelenésük sorrendjében kerülnek
végrehajtásra. A `-e' és `-f' opciók keverhetők.
A `-g' opció azt eredményezi, mintha minden helyettesítési
parancsnak `g' végződése lenne.
A `-n' opció elnyomja az alapértelmezett kimenetet.
A szkript soronként egy parancsot tartalmaz az alábbi forma szerint:
[cím [, cím] ] függvény [argumentumok]
Általában a sed ciklikusan bemásol az aktuális
szövegpufferbe egy sort a bemenetről, azután sorra alkalmazza
azokat a parancsokat, amelyek a cím(ek) alapján a sorra vonatkoznak,
végül a puffert a szabványos kimenetre másolja és
törli.
A `-n' opció elnyomja a normális kimenetet, így csak a `p'
és `w' parancsok kimenete készül el.
Néhány parancs (n, N) saját sorolvasást végez, és
néhány másik (d, D) a szkript minden további
utasítását átugorja. (A `D' parancs elnyomja a
szövegpuffer törlését, amely normálisan
bekövetkezne a következő ciklus előtt.)
Azt is hasznos tudni, hogy létezik egy második puffer (`hold space'),
amelyik másolható, hozzáfűzhető vagy
felcserélhető az aktuális szövegpufferrel.
A címzés egy decimális számjegy, `$'-jel, vagy tartalmi
címzés lehet. A decimális jegy a legelső beolvasott sor
esetén 1, és folyamatosan egyesével növekszik az
összes bemeneti fájl sorain keresztül. A `$'-jel az utolsó
bemeneti sort jelenti.
A tartalmi címzés egy `/szabályos kifejezés/' az ed (1)
stílusában, a következő különbségekkel:
- (1)
- A `0 jelsorozat egy pufferbe ágyazott
újsor-jellel egyezik meg, `' pedig egy tab-bal.
- (2)
- Címek nélküli parancssor minden puffert
kiválaszt.
- (3)
- Egy címzéssel rendelkező parancssor minden
olyan puffert kiválaszt, amely megfelel a címzésnek.
- (4)
- Két címzéssel rendelkező parancssor egy
tartományt választ ki, melybe beleértendők a megadott
határok is. A tartomány annál az első bemeneti
puffernél kezdődik, amely megfelel az első
címzésnek, és annál végződik, amely
ezután először felel meg a másodiknak. Amennyiben a
második címzés egy szám, amely kisebb vagy
egyenlő, mint az elsőnek kiválasztott sor száma, csak
egy sor kerül kiválasztásra. Mihelyt a második
cím is megegyezést mutat, a sed program újrakezdi az
első címzéssel való egyezés keresését;
így tetszőleges számú, a címzésnek
megfelelő tartomány egyezést mutat a
címzéssel.
A `!' negáló operátor azt eredményezi, hogy a parancs azokra
a sorokra vonatkozik, amelyeket a címzés nem választott ki.
A függvények következő listájában
zárójelben megadjuk a függvény által megengedett
címzések maximális számát.
A "szöveg"-gel jelölt argumentumok egy vagy több
sorból állhatnak, melyek közül az utolsó
kivételével mind `\'-re kell végződjön. (A `\' jel
elrejti a sorvégjelet.)
A szövegbeli backslash (fordított törtvonal) jeleket a program
úgy kezeli, mint az `s' parancs helyettesítési stringjében
levőket, és ezek a backslash jelek használhatók a kezdeti
szóközök és tabulátorok (whitespace karakterek)
megvédésére. Alapértelmezés szerint ugyanis ezeket a
bevezető jeleket figyelmen kívül hagyja a sed.
Az "rfile" és "wfile" jelölésű
argumentumok a parancssor legvégén kell álljanak. A sed minden
"wfile"-t létrehoz a feldolgozás megkezdése
előtt. Legfeljebb 10 "wfile" argumentum lehet.
A következőkben ismertetjük a sed által ismert
függvényeket.
- a "szöveg" (1)
- Csatolás (append). A "szöveg"-et a
kimenetre írja a következő bemeneti sor olvasása
előtt.
- b "címke" (2)
- Elágazás (branch) a "címkét"
viselő `:' parancsra. Amennyiben nincs megadva címke,
elágazás a szkript végére.
- c "szöveg" (2)
- Csere (change). Törli az aktuális
szövegpuffert. 0 vagy 1 címzéssel, illetve egy
kétcímzéses tartomány végén elhelyezi a
"szöveg"-et a kimeneten. Elkezdi a következő
ciklust.
- d (2)
- Törli (delete) az aktuális szövegpuffert.
Elkezdi a következő ciklust.
- D (2)
- Törli az aktuális szövegpuffer első
sorát, azaz az első újsor-karakter előtt
álló karaktereket és ezt az újsor-jelet. Elkezdi a
következő ciklust.
- g (2)
- Helyettesíti az aktuális szövegpuffer
tartalmát a második puffer (`hold space') tartalmával.
- G (2)
- Az aktuális szövegpuffer tartalmához
hozzáfűzi a második puffer (`hold space')
tartalmát.
- h (2)
- Az aktuális szövegpuffer tartalmát a
második pufferbe másolja.
- H (2)
- Az aktuális szövegpuffer tartalmát a
második pufferhez fűzi.
- i "szöveg" (1)
- Beilleszt (insert). Kiírja a
"szöveg"-et a szabványos kimenetre.
- l (2)
- Listáz. Kiküldi a mintaterületet a
szabványos kimenetre. Az `s' parancshoz hasonlóan egy `w'
opció követheti. A nem nyomtatható karakterek az
alábbiak szerint kerülnek kifejtésre:
\b -- backspace (ASCII 08)
\t -- tab (ASCII 09)
\n -- newline (ASCII 10)
\r -- return (ASCII 13)
\e -- escape (ASCII 27)
\xx -- a kétjegyű xx hexadecimális számmal
megadható ASCII karakter.
- n (2)
- Az aktuális szövegpuffer tartalmát a
szabványos kimenetre másolja, és beolvassa helyette a
következő bemeneti sort.
- N (2)
- A következő bemeneti sort az aktuális
szövegpuffer tartalmához fűzi, miközben egy
újsor-jelet illeszt közéjük. Az aktuális sor
száma megváltozik.
- p (2)
- Nyomtat (print). Az aktuális szövegpuffer
tartalmát a szabványos kimenetre másolja.
- P (2)
- Az aktuális szövegpuffer első sorát,
azaz az első újsor-karakter előtt álló
karaktereket a szabványos kimenetre másolja.
- q (1)
- Kilépés (quit). Elégazás a szkript
végére. Nem kezd új ciklust.
- r "rfile" (1)
- Belovassa (read) az "rfile" tartalmát
és a kimenetre írja, még mielőtt a következő
bemeneti sort beolvasná.
- s /szabályos
kifejezés/helyettesítés/zászlók (2)
-
A szabályos kifejezés előfordulásait helyettesíti
az aktuális szövegpufferben. A `/' kivételével minden
karakter használható. Teljesebb leírást lásd az
ed (1) kézikönyv lapján. A zászlók a
következők lehetnek: (Bármelyikük előfordulhat,
de az is lehet, hogy egyikük sem.)
g -- Globális. A string minden nem átfedő
megjelenését helyettesíti. Ha nincs megadva, csak az
első megjelenés helyettesítődik.
p -- Kinyomtatja (print) a minta területet ha helyettesítés
történt.
w -- Írás (write). Az aktuális szövegpuffert egy
argumentumként megadott fájlhoz fűzi hozzá, ahogy a
`w' parancsban, ha helyettesítés történik. Ha nincs
fájl argumentum, a szabványos kimenetre történik az
írás.
- t "címke" (2)
- Feltételes elágazás. Elágazás a
címkével jelzett `:' paracshoz, ha valamilyen
helyettesítés történt a bemeneti fájl
legújabb olvasása vagy a legutóbbi `t' vagy `T'
végrehajtása óta. Ha nincs megadva címke, akkor a
szkript végére történik elágazás.
- T "címke" (2)
- Ellentéte a `t' parancsnak. Elágazás a
címkével jelzett `:' paracshoz, ha semmilyen
helyettesítés sem történt a bemeneti fájl
legújabb olvasása vagy a legutóbbi `t' vagy `T'
végrehajtása óta. Ha nincs megadva címke, akkor a
szkript végére történik elágazás.
- w "wfile" (2)
- Írás (write). Az aktuális szövegpuffert
a "wfile" fájl tartalmához fűzi.
- W "wfile" (2)
- Az aktuális szövegpuffer első sorát a
"wfile" fájl tartalmához fűzi.
- x (2)
- Felcseréli (exchange) az aktuális
szövegpuffer tartalmát a második puffer (`hold space')
tartalmával.
- y /string1/string2/ (2)
- Fordít. A string1-ben előforduló
karaktereket a string2-ben azonos pozícióban
előfordulóval helyettesíti. A stringek hossza egyenlő
kell legyen.
- ! "parancs" (2)
- Kivétel. Azokra a sorokra alkalmazza a
függvényt (vagy csoportot, ha a függvény `}'), amelyek
nem lettek kiválaszva a címzés(ek)kel.
- : "címke" (0)
- Ez a parancs semmit sem csinál, csak a `b' és `t'
parancsok elágazásaihoz visel címkét.
- = (1)
- Az aktuális sorszámot a szabványos kimenetre
írja, mint egy külön sort.
- { (2)
- Parancs csoprotosítás. A következő
`}'-ig adott parancsokat végrehajtja a címzés(ek)
által meghatározott sorokra.
Az üres parancsot figyelmen kívül hagyja.
ÁTVIHETŐSÉG¶
Ez az eszköz a BSD 4.1 UNIX sed-je alapján fordított
tervezéssel készült, és (amennyire a szerző
tudása és a tesztek meg tudják határozni)
kompatíbilis azzal. A BSD 4.1 sed-jének minden dokumentált
lehetősége adott.
Egy dokumentálatlan tulajdonság (az első megjegyzést
bevezető `n' azonos hatását a `-n parancssor-opció'-val)
nem került implementálásra.
A BSD sed-hez képest javítások is történtek, melyeket
itt terjedelmi okokból nem tárgyalunk.
MEGJEGYZÉS¶
Ez a program egy `freeware' komponense a GNU és MINIX operációs
rendszereknek. A felhasználó itt megkapja a jogokat a program
használatára, módosítására és
terjesztésére a következő feltételek mellett:
1. A szerzőségre vonatkozó megjegyzést minden
forrásfájlban változatlanul meg kell hagyni.
2. A lefordított változat forráskód nélkül nem
terjeszthető.
LÁSD MÉG¶
ed(1),
grep(1),
awk(1),
lex(1), regexp(5)
SZERZŐ¶
Ezt a kézikönyv lapot Eric S. Raymond <esr@snark.thyrsus.com>
írta, habár a sed csomag a GNU-tól származik.
MAGYAR FORDÍTÁS¶
Horváth András <horvatha@rs1.szif.hu>