GNU-sed vs FreeBSD-sed

 ( Zahy | 2013. április 3., szerda - 13:27 )

Egy kis ujjgyakorlat kapcsán felmerült, hogy valamit át kéne írni perl-ről sed-re. Viszont kifejezetten hasznos lenne, ha nem Basic-regexp-et, hanem Extended-regexp-et lehetne használni. Ez ma már nem akkora probléma. FreeBSD alatt a sed-ben erre van a teljesen logikus -E opció (logikus, lásd grep -E). A doksiban az is benne van, hogy a Linuxok alatt elterjedt GNU-sed-del való kompatibilitás miatt elfogadja a(z abszolút értelmetlen) -r opciót is. És most jön a meglepetés: amikor kipróbáltam FreeBSD alatt, ment mind a kettő. És amikor kipróbáltam (kéznél épp egy ubi LTS volt, abban 4.2.1-es GNU-sed van), no azon is működött mind a kettő. Kár, hogy nincs dokumentálva :-) Pedig mivel tudom, hogy a GNU-fanok szerint a manual nem az igazi, és a rendes doksi info fájlban van, előbb megnéztem a manualban, utána az info-ban is. Mind a két helyen csak a -r (illetve a --regexp-extended) szerepel, a -E opció egyáltalán nem. Fura. (Majd még ki kéne derítenem, hogy makkosikszen hogy van ez, illetve OpenBSD-n. Ha valaki leírja, megköszönöm, ha nem, akkor majd magánlevelekkel zargatom ismerőseimet később.)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Este atnezek a makkos mokus ala, ha el nem felejtem, megnezem neked.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

Manban csak a -r, --regexp-extended szerepel, de sed -E opciora nem kozli, hogy ervenytelen parameter. Mivel peldam nincs, a gondolkodashoz pedig mar keso van, igy csak ennyiben tudtam segiteni.

---
Apple iMac 20"
áéíóöőúüű

Kérlek, egy kis teszt:

$ sed -E -e 's/(alma)|(korte)/X & Y/' << Q
Halmajugra
korterem
Q

A zárójelezés és a vagy-jel ERE-nek minősül, azaz ha lesz belőle

HX alma Yjugra
X korte Yrem

akkor ugyanúgy GNU-sed :-)
És persze kösz.

storm:~ czo$ /usr/bin/sed -E -e 's/(alma)|(korte)/X & Y/' << Q
> Halmajugra
> korterem
> Q
HX alma Yjugra
X korte Yrem

Kozben pontositok, az elobb a gnu sed manjat neztem (talaltam olyat is a gepemen :D), viszont ezt a kimenetet a gyari sed produkalja. A gyari sed manjaban csak a '-E' opciot emliti, a -r opcio futaskor hibat dob.

---
Apple iMac 20"
áéíóöőúüű

Köszi, akkor ezek szerint a nem-dokumentált -E opció hordozhatóbb, mint a dokumentált -r. (Ja, most belenéztem a GNU-sed 4.2.1 forrásába, és ezt találtam benne, az opciófeldolgozásnál:

/* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
if (extended_regexp_flags)
usage(4);
extended_regexp_flags = REG_EXTENDED;
break;

Szóval keresztbe-kasul kompatibilisek egymással :-)

Aki még nem látta: http://sed.sourceforge.net/