OS X sed -E no acepta expresiones regulares extendidas
He estado probando varias formas de hacer algunas cosas básicas con sed en OS X. Estos son los resultados de algunas pruebas simples.
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed 's/foo/FOUND/g'
devoluciones (como se espera)
FOUND bar 2011-03-17 17:31:47 FOUND bar
pero
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed -E 's/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/FOUND/g'
devoluciones
foo bar 2011-03-17 17:31:47 foo bar
y (aún más irritante)
echo "food bar 2011-03-17 17:31:47 food bar" | sed -E 's/\d/FOUND/g'
devoluciones
fooFOUND bar 2011-03-17 17:31:47 fooFOUND bar
Ahora elman sed
las páginas dicen que
The following options are available:
-E Interpret regular expressions as extended (modern) regular
expressions rather than basic regular expressions (BRE's). The
re_format(7) manual page fully describes both formats.
yman re_format
dice
\d Matches a digit character. This is equivalent to
`[[:digit:]]'.
Y de hecho:
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed -E 's/[[:digit:]]{4}/FOUND/g'
me da
foo bar FOUND-03-17 17:31:47 foo bar
... pero esto es molesto. Ya sea porque estoy siendo denso, o porque las páginas de manual sonmintiéndome (Para ser honesto, prefiero el primero).
Una breve revisión bibliográfica aquí sobre SO sugiere que no estoy solo en esto, y que muchos recomiendan instalarGNU coreutils
(o incluso usar otra cosa - decirperl -pe
) - Sin embargo, me gustaría estar seguro:
¿Funcionan los ERE consed
como se incluye con OS X, como lo indica elman
páginas - o no?
(Estoy en 10.8 y 10.6.8)