2013-03-23 16 views
6

Próbuję dopasować stałą liczbę cyfr za pomocą nawiasów klamrowych w awk, ale nie otrzymuję wyniku.Kręcone szelki w awk reg exp

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

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

Czy muszę zrobić coś konkretnego, aby użyć nawiasów klamrowych?

Odpowiedz

8

Mac OS X awk (BSD awk) współpracuje z pierwszego polecenia pokazanego:

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

GNU awk nie. Dodanie ukośników odwrotnych nie pomaga GNU awk. Używa się opcji --re-interval, podobnie jak w przypadku używania --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 
$ 

(nie jestem pewien, gdzie mawk 1.3.3 datowany 1996 pochodzi, ale to chyba czas, aby uzyskać zaktualizowaną wersję awk na komputerze.)

+1

Dzięki, że nie działa na moja wersja, w której pojawia się błąd 'awk: not a option: --re-interval' (' awk -W version' zwraca 'mawk 1.3.3 listopada 1996 ') wydaje się ogólną odpowiedzią. –

+0

Wow: to stara, stara wersja 'awk'. Być może nadszedł czas, aby zbadać aktualizację z tej wersji. –

+0

Gdy -re-interval nie jest opcją, to nie jest gawk. Kiedy potrzebujesz --re-interval, to stara wersja gawk. W każdym razie zdobądź najnowszy gawk. –