( uid_2516 | 2014. 06. 25., sze – 22:13 )

Formálisan igazad van. A _sed_ esetében a \( \) \{ \}... metakarakterek, a regexpnél meg a ( ) { } [ ] ? . stb.
De a tiszta-száraz érzés nekem az alábbi 3. példa, amikor a \(, meg a \. pont azt fejezi ki, hogy a következő karaktert értelmezés nélkül kérném, a (), {}, [] . magában is a regexp értelmes, jelentéssel bíró részét képező metakarakter, netán átemelhető a kifejezés másik értelmezőbe módosítás nélkül.

Ezért nekem a "\(" az 1. példában "védelem", (mert egy másik értelmező a "("-t is megértené. A "." maga metakarakter, ezért védeni kell középen - olyan zagyva, na.
A 3. példában meg kitisztul minden. A "(" metakarakter lesz, ha meg a karaktere kell, megvédem. Itt a gép érti az igényem, míg fentebb nekem kell a sed _sajátos_ dialektusát érteni.

Azaz - ha lehet - a sed tanuljon meg regexp-ül, ne én sed-ül.


#1
echo 'alma (belma . celma) delma' | sed -e 's/.*\((.*\..*)\).*/\1/'
(belma . celma)

echo 'alma (belma . celma) delma' | sed -re 's/.*\((.*\..*)\).*/\1/'
belma . celma

#3
echo 'alma (belma . celma) delma' | sed -re 's/.*(\(.*\..*\)).*/\1/'
(belma . celma)

--
bocs, ha offtopic
bocs, mert szubjektív