sed
A sed (stream editor) egy nem interaktív szövegszerkesztő program a Unix operációs rendszerben. A szövegszerkesztő parancsokat parancssorból vagy -fájlból veszi. Használhatjuk helyettesítésre, törlésre vagy transzformációra. Néhány kivételtől eltekintve egyszerre egy sorral dolgozik. Az állomány sorait rendre olvassa be a mintatérbe, és hajtja végre rajta a scriptben szereplő parancsokat. Ha a scriptben szereplő összes parancs feldolgozta a mintatérben levő sort, akkor a mintatér tartalma kikerül a standard outputra (a -n opcióval ezt a default kiírást letilthatjuk).
1973 és 1974 között fejlesztette ki Lee E. McMahon mint Unix alkalmazást, de napjainkban is minden operációs rendszerben elérhető.
Használata
[szerkesztés]sed
kapcsolók file...
Az eredmény a standard outputra kerül (tehát több fájl esetén is egy eredményfájl van).[1] A kimenetet rendszerint fájlba irányítjuk vagy pipeline-nal (|
) tovább alakítjuk.
(Ha sem a -e
, sem a -f
kapcsoló nincs megadva, a sed az első paramétert tekinti az egyetlen szerkesztő utasításnak, a többit fájlnak.)
Főbb kapcsolók
[szerkesztés]-e
: szerkesztőparancs. Több-e
paraméter lehet a parancssorban.-f
: parancsfájl. A sed ebből olvassa a szerkesztő parancsokat.-n
: a mintatér nem íródik ki a parancsok feldolgozása után; lásdp
parancs.
Főbb parancsok
[szerkesztés]Minden parancs egybetűs. A betűt megelőzheti a sor(ok) megadása, amely(ek)re azt végre kell hajtani. Ha elmarad, minden sorra végrehajtódik az utasítás. A parancs betűjét követheti(k) a parancs paramétere(i).
A sorok egy vagy két paraméterrel adhatók meg. Az utóbbi sortartományt jelent kezdő- és végsor alakban.
A sorparaméter megadható sorszámmal vagy két /
közé zárt reguláris kifejezéssel.[2] A sortartomány két tagja különböző módon is leírható, második sorparaméter pedig lehet az elsőhöz relatív +N
ill. -N
alakban.
A betű előtti !
megfordítja a sorkijelölést: ezekre nem hajtódik végre az utasítás.
A fontosabb egybetűs parancsok és paramétereik:
s/
mit/
mire/
hányadik
Helyettesítés. mit reguláris kifejezés. mire-ben a&
-jellel hivatkozhatunk a mit-hez illeszkedő mintára.[3] Az utolsó paraméter azt mondja meg, hányadik talált mintában kell a helyettesítést végrehajtani. Ag
érték minden illeszkedésre végrehajtja a helyettesítést a sorban.d
Törli a sort a mintatérből.p
Kiírja a mintatér aktuális tartalmát a standard outputra.
Példák
[szerkesztés]A következő példa a sed egy általános használata:
echo "`sed 's/ui./ugyanis/g' inputFileName`" > outputFileName
Az s arra utal, hogy most a programot behelyettesítésre használjuk, a g miatt pedig a mintát az összes előfordulásában helyettesíti az új mintával. Az első helyen mindig az a minta található, amit keresek és amit helyettesíteni akarok, a második helyen pedig az új minta, mellyel helyettesítem a régi mintát.
A Unix, sed -et gyakran használják szűrőként a csővezetékkel, a pipeline együtt:
generate_data | sed -e 's/x/y/g'
A felső példában generáljuk a data állományt, majd a sed segítségével az x összes előfordulását helyettesítjük y-nal. Az e opciót akkor használjuk, ha a sed parancssorban több végrehajtandó scriptet adunk meg. Egyetlen script esetén elhagyható.
Példa a d utasítás használatára:
sed '/^$/d' file
A példában a sed törli az üres sorokat a file nevű állományból.
Az alábbi példában törlődnek az üres sorok és azok, melyek csak szóközt tartalmaznak:
sed -e '/^ *$/d' inputFileName
Az előbbi példák olyan karaktereket használtak, melyek különböző reguláris kifejezések:
- A kalap (
^
) a sor kezdetét jelöli. - A dollárjel (
$
) a sor végét jelöli. - A csillag (
*
) jelöl egy nulla vagy több karaktert.
Története
[szerkesztés]A sed az első Unix parancsok közé tartozik, mely segítségével állományok sorait dolgozzuk fel. Továbbfejlesztés során jött létre a grep parancs. A sed és az AWK járult hozzá a Perl kifejlesztéséhez.
Jegyzetek
[szerkesztés]- ↑ Létezik fájlba író parancs, mellyel nemcsak a standard output lehet az eredmény helye.
- ↑ A
/
-t más karakter is helyettesítheti\
c ... c alakban, ahol c a/
-t helyettesítő karakter. - ↑ A mit egyes részeire is lehet hivatkozni. A reguláris részkifejezéseket
\(
és\)
közé zárjuk, így mire-ben\1
,\2
stb. alakban hivatkozhatunk rá.