2013-05-09 7 views
5

Moja komenda jest tak:Dlaczego ta komenda sed, aby dopasować numer, nie działa?

echo "12 cats" | sed 's/[0-9]+/Number/g' 

(Używam sed w waniliowym Mac)

Spodziewam się, że wynik będzie:

Number cats 

Jednak prawdziwy wynik jest :

12 cats 

Czy ktoś ma pomysły na ten temat? Dzięki!

+0

Dla systemu Linux możesz użyć opcji '-r' dla sed, na Mac możesz użyć' -E' ... który działa również na niektóre odmiany Linuksa jako kompatybilność Shim – Petesh

Odpowiedz

7

Rozszerzenie modyfikator + działa dla mnie:

echo "12 cats" | sed 's/[0-9][0-9]*/Number/g' 

Ponadto, przełącznik -E by uczynić pracę + modyfikatora, patrz odpowiedź choroba jest.

+0

Wygląda na to, że BSD sed nie obsługuje domyślnie '+' .. –

16

+ musi być backslashed, aby uzyskać specjalne znaczenie.

echo "12 cats" | sed 's/[0-9]\+/Number/g' 
+1

To nie działa dla mnie albo (vanilla Mac sed). – zoul

+0

@zoul: Zobacz http://stackoverflow.com/q/4453760/1030675 – choroba

+2

Aha, dzięki! (Mac sed jest zbyt konserwatywny, aby rozpoznać modyfikator '+ 'Przełącznik' -E' włącza rozszerzone wyrażenia regularne, w których '+' działa bez zmiany znaczenia.) – zoul

1

Używaj perla, będzie działać na systemie Unix lub Linux.

echo "12 cats" | perl -pe 's/\d+/Number/g' 
0

W bardzo mistyczny sposób, że nie jest wyjaśniona (przynajmniej w zasobach mam tak daleko ..), Należy sprawdzać kolejne terminy:

nazw plików (w kontekście bash) , regex, rozszerzony regex

za pytanie wydaje się, że wyrażenie”daliście do sed jest regex lub przekształcone regex .... tak przez tutorial czytam należy wstawić również -r przed rzeczywisty polecenie w sed ...

echo "12 kotów" | sed -r 's/[0-9] +/Number/g'

Działa dla mnie w Ubuntu 16.04, bash.

+0

Nie widziałem, że to 4 lata temu .... prawdopodobnie moje odpowiedzi nie są już tak ważne ... haha ​​..... jednak podkreśla to moją pierwszą linię w odpowiedzi. – YigalO