To jest, jeśli chcesz zero lub więcej cyfr. /[[:digit:]]*\. /dopasuje ciąg, foo.ponieważ dopuszczasz zero cyfr. Jeśli chcesz użyć jednego lub więcej, \+jak pokazano
glenn jackman
71
Dwa problemy:
sednie obsługuje \d. Użyj [0-9]lub [[:digit:]].
+Należy odwrotnym ukośnikiem, aby uzyskać specjalne znaczenie: \+.
zamiast odwrotnego ukośnika + (który nie działa na przykład w systemie Mac OS X), możesz użyć opcji -E interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).Niestety, nie pomaga to z problemem \ d ...
gMale
4
@gmale: -Enie działa dla GNU sed, -rzamiast tego używa .
choroba
12
Ok ... wygląda na sedto, że jest do bani, jeśli chodzi o przenośność ...
iconoclast
@choroba Chyba się dzisiaj pomyliłem. Usunę moje głośne komentarze ...
Steven Lu
Zasadniczo próbowałem ostrzec ludzi: Jeśli nie używasz rozszerzonego wyrażenia regularnego ( -Ena BSD sed i -rGNU sed), w BSD sed, ani +nor \+(to samo z ?) w ogóle nie będzie działać, podczas gdy w GNU sed możesz zachęć ich do pracy z odwrotnym ukośnikiem. Stąd powszechna rekomendacja używania rozszerzonego wyrażenia regularnego w skryptach
Steven Lu
3
Strona man sed odwołuje się do strony man re_format. To czyni 2 rozróżnienia: (1) przestarzałe w porównaniu do rozszerzonych wyrażeń regularnych; (2) nieulepszone kontra ulepszone wyrażenia regularne. Możliwe są wszystkie 4 kombinacje. Istnieje wsparcie zarówno dla przestarzałych, jak i rozszerzonych, ale w obu przypadkach tylko dla nieulepszonych. Operator \ d jest funkcją ulepszonych wyrażeń regularnych, dlatego nie jest obsługiwany przez sed.
Odpowiedzi:
Ponieważ sed nie jest perlem - wyrażenia regularne sed nie mają
\d
skrótu:tutaj znajduje się dokumentacja wyrażeń regularnych .
źródło
/[[:digit:]]*\. /
dopasuje ciąg,foo.
ponieważ dopuszczasz zero cyfr. Jeśli chcesz użyć jednego lub więcej,\+
jak pokazanoDwa problemy:
sed
nie obsługuje\d
. Użyj[0-9]
lub[[:digit:]]
.+
Należy odwrotnym ukośnikiem, aby uzyskać specjalne znaczenie:\+
.źródło
interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).
Niestety, nie pomaga to z problemem \ d ...-E
nie działa dla GNU sed,-r
zamiast tego używa .sed
to, że jest do bani, jeśli chodzi o przenośność ...-E
na BSD sed i-r
GNU sed), w BSD sed, ani+
nor\+
(to samo z?
) w ogóle nie będzie działać, podczas gdy w GNU sed możesz zachęć ich do pracy z odwrotnym ukośnikiem. Stąd powszechna rekomendacja używania rozszerzonego wyrażenia regularnego w skryptachStrona man sed odwołuje się do strony man re_format. To czyni 2 rozróżnienia: (1) przestarzałe w porównaniu do rozszerzonych wyrażeń regularnych; (2) nieulepszone kontra ulepszone wyrażenia regularne. Możliwe są wszystkie 4 kombinacje. Istnieje wsparcie zarówno dla przestarzałych, jak i rozszerzonych, ale w obu przypadkach tylko dla nieulepszonych. Operator \ d jest funkcją ulepszonych wyrażeń regularnych, dlatego nie jest obsługiwany przez sed.
źródło