Regex Awk是否支持正则表达式量词\{m,n\}或\{m\}或\{m,\}?
我正在寻找打印文件中的所有列,可以包含一个10位数的手机号码 我试过这个:Regex Awk是否支持正则表达式量词\{m,n\}或\{m\}或\{m,\}?,regex,awk,Regex,Awk,我正在寻找打印文件中的所有列,可以包含一个10位数的手机号码 我试过这个: awk '/[0-9]\{10\}/{for(i=1;i<=NF;++i)if($i~/[0-9]\{10\}/)print $i}' filename 是的,在GNU awk中是这样的!只是你不必逃避它们: $ awk 'BEGIN{v=10; if (v~/10{2}/) print "yes"}' $ awk 'BEGIN{v=100; if (v~/10{2}/) print &qu
awk '/[0-9]\{10\}/{for(i=1;i<=NF;++i)if($i~/[0-9]\{10\}/)print $i}' filename
是的,在GNU awk中是这样的!只是你不必逃避它们:
$ awk 'BEGIN{v=10; if (v~/10{2}/) print "yes"}'
$ awk 'BEGIN{v=100; if (v~/10{2}/) print "yes"}'
yes
因此,正则表达式应该如下所示:
/[0-9]{10}/
根据您的示例输入,它将产生以下结果:
$ awk '/[0-9]{10}/ {for (i=1;i<=NF;i++) if ($i ~ /[0-9]{10}/) print $i}' n
9898664511
7788992121
7665544213
9090876534\n
发件人:
{n}
{n,}
{n,m}
大括号内的一个或两个数字表示区间表达式。如果大括号中有一个数字,则前面的regexp将重复n次。如果有两个数字以逗号分隔,则前面的regexp将重复n到m次。如果有一个数字后跟逗号,则前面的regexp将至少重复n次:
wh{3}y
匹配“whhhy”,但不匹配“why”或“whhhy”
wh{3,5}y
仅匹配“whhhy”、“whhhy”或“whhhhy”
wh{2,}y
匹配“whhy”、“whhy”等
区间表达式在awk中传统上不可用。它们被添加为POSIX标准的一部分,以使awk和egrep相互一致。
最初,因为旧程序可能在regexp常量中使用“{”和“}”,所以gawk与regexp中的区间表达式不匹配
但是,从版本4.0开始,gawk默认情况下会匹配区间表达式。这是因为对于大多数gawk用户来说,与POSIX的兼容性比与旧程序的兼容性更为重要
对于在regexp常量中使用“{”和“}”的程序,最好总是使用反斜杠对其进行转义。然后,regexp常量是有效的,并且使用任何版本的awk.16按照您希望的方式工作
最后,当“{”和“}”以不能解释为区间表达式的方式出现在regexp常量中(例如/q{a}/)时,它们代表它们自己
我只想在你的控制台中使用awkType
awk--version
,把输出放在你的问题中。谁投票关闭了通用计算硬件和软件
lol?我试过awk'/[0-9]{10}/{for(I=1;你在GNU awk吗?另外,请在你的问题中提供一个答案。编辑它以反映这一点。我试过这个awk'/[0-9]{10}/{for(i=1;iyes我使用了/usr/xpg4/bin/awk,这是预期的效果,thanksRE间隔不是特定于gawk
,它们是ERE中的POSIX。任何POSIXawk
都将支持它们。sed
需要转义它们的原因是sed默认支持BRE,而不是ERE,因此您需要转义ERE元字符以将其激活为例如在sed
脚本中。GNU awk的旧版本在默认情况下不支持它们与旧的awk脚本向后兼容(其中/a{2}/
字面意思是“a{2}”
不是“aa”
),但随着POSIX的发展,gawk
。其他旧的awk(例如名称非常糟糕的“New awk”、nawk
)不兼容POSIX,不支持它们。
wh{3,5}y
wh{2,}y