2013-03-23 19 views
6

Sto cercando di abbinare un numero fisso di cifre usando parentesi graffe in awk ma non ottengo alcun risultato.parentesi graffe in awk reg exp

# This outputs nothing 
echo "123" | awk '/^[0-9]{3}$/ {print $1;}' 

# This outputs 123 
echo "123" | awk '/^[0-9]+$/ {print $1;}' 

Devo fare qualcosa di specifico per utilizzare le parentesi graffe?

risposta

8

Mac OS X awk (BSD awk) funziona con il primo comando mostrato:

$ echo "123" | /usr/bin/awk '/^[0-9]{3}$/ {print $1;}' 
123 
$ 

GNU awk non lo fa. L'aggiunta di backslash non aiuta GNU awk. L'uso dell'opzione --re-interval fa, e così fa usando --posix.

$ echo "123" | /usr/gnu/bin/awk --re-interval '/^[0-9]{3}$/ {print $1;}' 
123 
$ echo "123" | /usr/gnu/bin/awk --posix '/^[0-9]{3}$/ {print $1;}' 
123 
$ 

(non sono sicuro dove mawk 1.3.3 del 1996 viene, ma è probabilmente il momento di ottenere una versione aggiornata del awk per la vostra macchina.)

+1

Grazie, ma non funziona su la mia versione in cui ottengo un 'awk: non un'opzione: errore -re-interval' (' awk -W versione' restituisce 'mawk 1.3.3 Nov 1996') sembra la risposta generale. –

+0

Wow: questa è una vecchia versione di 'awk'. Forse è il momento di esaminare un aggiornamento da quella versione. –

+0

Quando --re-interval non è un'opzione, non è gawk. Quando hai bisogno di --re-interval, questa è una vecchia versione di gawk. In ogni caso, prendi l'ultimo gawk. –