OS X sed -E não aceita expressões regulares estendidas
Eu tenho tentado várias maneiras de fazer algumas coisas básicas com sed no OS X. Aqui estão os resultados de alguns testes simples.
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed 's/foo/FOUND/g'
retorna (como esperado)
FOUND bar 2011-03-17 17:31:47 FOUND bar
mas
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'
devolve
foo bar 2011-03-17 17:31:47 foo bar
e (ainda mais irritante)
echo "food bar 2011-03-17 17:31:47 food bar" | sed -E 's/\d/FOUND/g'
devolve
fooFOUND bar 2011-03-17 17:31:47 fooFOUND bar
Agora oman sed
páginas dizem 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.
eman re_format
diz
\d Matches a digit character. This is equivalent to
`[[:digit:]]'.
E realmente:
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed -E 's/[[:digit:]]{4}/FOUND/g'
me dá
foo bar FOUND-03-17 17:31:47 foo bar
... mas isso é chato. Ou porque estou sendo densa, ou porque as páginas do man sãomentindo para mim (para ser honesto, prefiro o primeiro).
Uma revisão rápida da literatura aqui no SO sugere que eu não estou sozinho nisso, e que muitos recomendam instalarGNU coreutils
(ou mesmo usar outra coisa - digamosperl -pe
) - no entanto, eu gostaria de ter certeza:
Os EREs trabalham comsed
como é empacotado com o OS X - como implicado peloman
páginas - ou não?
(Estou em 10.8 e 10.6.8)