ksh 中数字验证的正则表达式模式问题

ksh 中数字验证的正则表达式模式问题

我正在编写一个 ksh 脚本来验证该列是否为数字。正则表达式模式在配置文件中定义,例如\d+.\d+.但是当我使用模式时这不起作用d。不过[0-9]{1,9}正在工作。对此有何见解?

  • 这是我正在使用的 ksh 版本:
    $ ksh --version
      version         sh (AT&T Research) 93u+ 2012-08-01
    
  • 用于模式比较的代码片段。如果我提供$col_patt\d+不会起作用但[0-9]{1,}会起作用
    val=$(awk -F "$sep" -v n="$col_pos" -v m="$col_patt" 'NR!=1 && $n !~ "^" m "$" {
                             printf "%s:%s:%s\n", FILENAME, FNR, $n > "/dev/stderr"
                             count++
                           }
                           END {print count+0}' "$cp_input" 2>> $script_path/errors_${file_name_patt}.log
                           )
    
  • 这是使用的模式:\d*\.\d+

答案1

各种实用程序、语言、正则表达式/模式库和 API 支持不同的运算符/通配符。

\d is a perl regex operator that matches a decimal digit (generally any of 0123456789, but under some conditions can match other decimal digits (there are hundreds in Unicode such as 0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯෦෧෨෩෪෫෬෭෮෯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹0123456789

相关内容