OS X sed -E akzeptiert keine erweiterten regulären Ausdrücke
Ich habe verschiedene Möglichkeiten ausprobiert, um einige grundlegende Dinge mit sed unter OS X zu tun. Hier sind die Ergebnisse einiger einfacher Tests.
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed 's/foo/FOUND/g'
kehrt zurück (wie erwartet)
FOUND bar 2011-03-17 17:31:47 FOUND bar
aber
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'
kehrt zurück
foo bar 2011-03-17 17:31:47 foo bar
und (noch irritierender)
echo "food bar 2011-03-17 17:31:47 food bar" | sed -E 's/\d/FOUND/g'
kehrt zurück
fooFOUND bar 2011-03-17 17:31:47 fooFOUND bar
Jetzt dieman sed
Seiten sagen das
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.
undman re_format
sagt
\d Matches a digit character. This is equivalent to
`[[:digit:]]'.
Und in der Tat:
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed -E 's/[[:digit:]]{4}/FOUND/g'
gibt mir
foo bar FOUND-03-17 17:31:47 foo bar
... aber das ist ärgerlich. Entweder weil ich dicht bin oder weil die Manpages dicht sindmich anlügen (um ehrlich zu sein, würde ich das erstere vorziehen).
Eine kurze Literaturübersicht über SO deutet darauf hin, dass ich hier nicht alleine bin und dass viele die Installation empfehlenGNU coreutils
(oder in der Tat etwas anderes verwenden - sagen wirperl -pe
) - ich möchte jedoch sicher sein:
Arbeiten EREs mitsed
wie es mit OS X gebündelt ist - wie von derman
Seiten - oder nicht?
(Ich bin auf 10.8 und 10.6.8)