Regex 匹配[g]awk中的数字

Regex 匹配[g]awk中的数字,regex,awk,posix-ere,Regex,Awk,Posix Ere,我被难住了!试图编写一个awk正则表达式,使字符串与11位数字匹配 我试过: 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]+/ )

我被难住了!试图编写一个awk正则表达式,使字符串与11位数字匹配

我试过:

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位数字。

Doh-忘记RTM:

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

如果您正试图在字符串中的某个位置精确匹配11个连续数字:

使用测试文件:

hi12345678910
hi1234
awk命令行的windows版本:

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

hi12345678910

您描述了您的问题,但没有告诉我们您的awk版本。这是一个重要的信息

但这可能适用于您的情况:

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

如果我们知道版本,可能会有更简单的解决方案。

如果您只需要regexp interval并拥有旧版本的gawk,请使用--re interval而不是--posix,因为后者会禁用所有gawk扩展,如gensub(),等等。这仅适用于旧版本的gawk。获取最新版本,默认情况下会启用重新间隔。您使用的是哪种awk(gawk vs nawk vs/usr/xpg4/bin/awk vs?那个awk的哪个版本(awk--版本)?