Címzés a sed-ben

A következőkben nézzük meg, hogy mennyiben tér el a sed által használt parancsformátum és címzés az ed-nél megismertektől. Az általános parancsmegadás formája a sed esetében is ugyanaz, mint az ed-nél volt:

[cím1 [, cím2] parancs [opció(k)]

azaz nulla, egy vagy két cím (ami kijelöli a parancs működési tartományát), maga a sed parancs, s végül az esetleges parancsmódosító flag-ek. A címmegadás is hasonló az ed-hez: használhatunk abszolút vagy relatív sorszámokat, illetve reguláris kifejezéseket. Mindjárt beleütközünk viszont egy alapvető korlátba: ellentétben az interaktív működésű ed editorral, itt a fájlban visszafelé nem hivatkozhatunk, hiszen a sed az egyszer már beolvasott és feldolgozott sorra nem tud visszatérni. Ennek értelmében az

50,$d

megadás (töröljük a fájl sorait az ötvenediktől a fájl végéig) teljesen szabályos, de a

$,.-3d

már nem, s erre a sed figyelmeztet is, hiszen a relatív visszalépéssel nem tud mit kezdeni.

Egy vagy két cím esetén az ed és a sed program azonosan működik, azaz a megadott soron, vagy sortartományban operál. Például a

/brehm_eleje/,/brehm_vege/ s/kutya/cica/

parancs esetén mindkét program az első, brehm_eleje szót tartalmazó sortól az első brehm_vege sorig próbálja meg a kutya szót cica-ra cserélni. Cím nélküli sor esetében viszont eltérő viselkedésük: az ed esetében a

s/kutya/cica/

parancs az aktuális sorban cserélte kutyát cicára (ha volt ilyen minta a sorban); sed esetében ugyanez a parancs azt jelenti, hogy a bemenet minden egyes során kísérelje meg a sed a behelyettesítést. Szemléletes ökölszabályként azt mondhatjuk, az ed esetében az alapértelmezés az aktuális sor, s minden címmegadás ehhez képes bővíti a parancs hatókörét, a sed esetében épp ellenkezőleg, alapértelmezés szerint minden soron végrehajtódik egy adott parancs, s a címtartomány megadása ezt csak szűkítheti.

Még egy utolsó megjegyzés a címzéssel kapcsolatban: ha egy címmegadás után a '!' (felkiáltójel) karakter szerepel, az megfordítja a címzés értelmet, azaz az utána következő parancs(ok) az adott címzéssel ki nem jelölt bemeneten hajtódnak végre. Ha például a

/ez_kell/!d

parancsot adjuk ki, akkor minden, az ez_kell szekvenciát nem tartalmazó sor törlődik a bemenetről.

 

Tartalomjegyzék