2013-05-09 5 views
5

mio comando è simile a questo:Perché questo comando sed per abbinare il numero non funziona?

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

(sto usando il sed in vaniglia Mac)

mi aspetto che il risultato sia:

Number cats 

Tuttavia, il vero risultato è :

12 cats 

Qualcuno ha idee a riguardo? Grazie!

+0

Per Linux, è possibile utilizzare l'opzione '-r' per sed, per Mac, è possibile utilizzare' -E' ... che funziona anche su alcune varianti di Linux come shim di compatibilità – Petesh

risposta

7

Ampliare il modificatore + funziona per me:

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

Inoltre, l'interruttore -E renderebbe il lavoro + modificatore, vedere la risposta di choroba.

+0

Sembra che il BSD sed non supporti '+' di default .. –

16

+ deve essere backslashed per ottenere il suo significato speciale.

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

Che non funziona per me (vanilla Mac sed). – zoul

+0

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

+2

Aha, grazie! (Il Mac sed è troppo conservativo per riconoscere il modificatore '+' L'opzione '-E' attiva le espressioni regolari estese dove' +' funziona senza caratteri di escape.) – zoul

1

Usa perl, questo funzionerà su Unix o Linux.

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

In un modo molto mistica che non è spiegato (almeno in termini di risorse che ho finora ..), Si dovrebbe controllare le seguenti termini:

globbing (nel contesto di bash) , regex, estesa espressione regolare

per la tua domanda sembra che l'espr' che hai dato a sed è un regex o regex esteso .... quindi da un tutorial che ho letto è necessario inserire anche il -r prima del tuo attuale comando in sed ...

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

Funziona per me in Ubuntu 16.04, bash.

+0

Non l'ho visto è 4 anni fa .... probabilmente la mia risposta non è più cruciale haha ​​..... tuttavia sottolinea la mia prima riga nella risposta. – YigalO