Próbuję użyć \d
w regex w sed, ale to nie działa:Dlaczego ` d` nie działa w wyrażeniach regularnych w sed?
sed -re 's/\d+//g'
Ale to działa:
sed -re 's/[0-9]+//g'
Próbuję użyć \d
w regex w sed, ale to nie działa:Dlaczego ` d` nie działa w wyrażeniach regularnych w sed?
sed -re 's/\d+//g'
Ale to działa:
sed -re 's/[0-9]+//g'
\ d jest przełącznikiem, a nie makrem wyrażenia regularnego. Jeśli chcesz korzystać z niektórych predefiniowanego „stałą” istead [0-9] wypowiedzi po prostu spróbować uruchomić ten kod
s/[[:digit:]]+//g
ale dlaczego "\ w" działa – user2036880
Tak jak napisano, jest to dokumentacja sed "\ w Pasuje do dowolnego znaku" słownego "Znak" słowny "to dowolna litera lub cyfra lub znak podkreślenia." I kolejna interesująca linia "Ponadto ta wersja sed obsługuje kilka znaków escape (z których niektóre są wieloznakowe) do wstawiania niedrukowalnych znaków w skrypty (\ a, \ c, \ d, \ o , \ r, \ t, \ v, \ x). Mogą one powodować podobne problemy ze skryptami napisanymi dla innych sedów. " Aby uzyskać więcej informacji na http://www.gnu.org/software/sed/manual/sed.html – Kamil
@ user2036880, jak wskazuję w drugiej części mojej odpowiedzi '\ d' ma inne znaczenie w sed. –
Nie ma takiego specjalna grupa znaków w sed. Będziesz musiał użyć [0-9]
.
W GNU sed, \d
wprowadza dziesiętny kod znaków od jednej do trzech cyfr w zakresie 0-255. Jak wskazano in this comment.
Lepiej użyć Rozszerzone wzór w sed dodając -E
. W podstawowej funkcji RegExp, \ d i niektóre inne nie zostaną wykryte. -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.
'\ d' nie zostanie wykryty z opcją -E. –
Bo napisałeś źle. Działa to dobrze: 'perl -e 's/\ d + // g''. Nie wiem, co to jest '-r', ponieważ nie jest częścią POSIX. – tchrist
@tchrist kiedy wspomniałem, że używam perl – user2036880
źle zrozumiałeś dowcip. – tchrist