![ksh での数字検証の正規表現パターンの問題](https://rvso.com/image/192233/ksh%20%E3%81%A7%E3%81%AE%E6%95%B0%E5%AD%97%E6%A4%9C%E8%A8%BC%E3%81%AE%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AE%E5%95%8F%E9%A1%8C.png)
列が数値であることを検証する 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
0123456789
は、10進数の数字(通常は のいずれかですが、条件によっては他の10進数の数字(Unicodeには何百もの数字があります))に一致するPerl正規表現演算子です。0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹րցւփքօֆּ ...聖書の言葉෮෯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔言語よろしくお願いいたします᱇᱈᱉᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉꧐꧑꧒ ꧓꧔꧕꧖꧗꧘꧙꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹0123456789