2013-04-18 74 views
2

我很難過!試圖編寫一個awk正則表達式來匹配11位數字的字符串。匹配[g] awk中的數字

我已經試過:

if (var ~ /^[0-9]{11}$/) 
if (var ~ /^([0-9]){11}$/) 
if (var ~ /^([0-9]{11})$/) 
if (var ~ /^[0-9]{11}/) # altho I really do need to check the whole str 
if (var ~ /[0-9]{11}/) 

如果我用這個....

if (var ~ /^[0-9]+/) 

然後我得到一個比賽 - 但我需要檢查的正是11位。

+0

你正在使用哪種awk(gawk vs nawk vs/usr/xpg4/bin/awk vs ...)? awk的哪個版本(awk --version)? –

回答

1

你描述你的問題,但並沒有告訴我們你的awk版本。這是一個重要的信息。

但是這可能是你的情況下工作:

if (var ~ /^[0-9]+$/ && length(var)==11) 

如果我們知道的版本,有可能是簡單的解決方案。

0

衛生署 - 忘了RTM:

   Interval expressions are only available if either --posix or 
       --re-interval is specified on the command line. 
+0

這隻適用於老版本的gawk。獲取最新版本,默認情況下啓用RE間隔。 –

1

如果你試圖匹配字符串中正是連續數字某處:

使用測試文件:

hi12345678910 
hi1234 

awk命令行的windows版本:

awk --posix "{ if ($1 ~ /[0-9]{11}/) print}" testfile.txt 

印刷:

hi12345678910 
+1

如果你只是想要正則表達式的時間間隔和舊版本的gawk,使用--re-interval而不是--posix,因爲後者會禁用像gensub()等所有gawk擴展。 –