【问题标题】:Match digits in [g]awk匹配 [g]awk 中的数字
【发布时间】:2013-04-11 20:58:47
【问题描述】:

我被难住了!尝试编写一个 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 位数字。

【问题讨论】:

  • 您使用的是哪个 awk(gawk vs nawk vs /usr/xpg4/bin/awk vs ...)?哪个版本的 awk (awk --version)?

标签: regex awk posix-ere


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您尝试完全匹配字符串中某处的 11 个连续位:

    使用测试文件:

    hi12345678910
    hi1234
    

    awk命令行的windows版本:

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

    打印出来了:

    hi12345678910
    

    【讨论】:

    【解决方案3】:

    Doh - 忘了 RTM:

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

    【讨论】:

    • 这仅适用于旧版本的 gawk。获取最新版本并默认启用 RE 间隔。
    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 2011-05-07
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多