GNU-sed vs FreeBSD-sed

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ások

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"
áéíóöőúüű


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 :-)