OS X sed -E nie akceptuje rozszerzonych wyrażeń regularnych
Próbowałem różnych sposobów na zrobienie kilku podstawowych rzeczy z sed na OS X. Oto wyniki kilku prostych testów.
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed 's/foo/FOUND/g'
zwroty (zgodnie z oczekiwaniami)
FOUND bar 2011-03-17 17:31:47 FOUND bar
ale
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'
zwraca
foo bar 2011-03-17 17:31:47 foo bar
i (jeszcze bardziej irytująco)
echo "food bar 2011-03-17 17:31:47 food bar" | sed -E 's/\d/FOUND/g'
zwraca
fooFOUND bar 2011-03-17 17:31:47 fooFOUND bar
Terazman sed
strony to mówią
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.
iman re_format
mówi
\d Matches a digit character. This is equivalent to
`[[:digit:]]'.
I rzeczywiście:
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed -E 's/[[:digit:]]{4}/FOUND/g'
daje mi
foo bar FOUND-03-17 17:31:47 foo bar
... ale to jest denerwujące. Albo dlatego, że jestem gęsty, albo dlatego, że strony podręcznika sąokłamuje mnie (szczerze mówiąc, wolałbym to pierwsze).
Szybki przegląd literatury tutaj na temat SO sugeruje, że nie jestem w tym osamotniony i że wielu zaleca instalowanieGNU coreutils
(lub rzeczywiście użyj czegoś innego - powiedzperl -pe
) - jednak chciałbym być pewien:
Czy współpracują z EREsed
ponieważ jest dołączony do OS X - jak sugerujeman
strony - czy nie?
(Jestem na 10.8 i 10.6.8)