正規表現で3600以上を表現する方法

正規表現で3600以上を表現する方法

3600以上の数字と一致するようにこの正規表現を作成しました。これが私の試みです。しかし、完了したかどうかはわかりません。

grep -P '36[0-9]+[0-9]+[0-9]*' test.txt

私は正の10進整数を意味します(浮動数、負数、8進数、16進数、ローマ数字などは考える必要はありません...)。

答え1

([1-9][0-9]{2,}|[4-9][0-9]|3[6-9])[0-9]{2}周囲に負の数、浮動小数点、1000単位の制限などがないと確信できる場合は、拡張正規表現がその操作を実行する必要があります。

この式には3つのパスがあり、すべてのパスの共通点は最後の部分で[0-9]{2}ある2桁の数字です。

  • 最初のパスは1〜9に少なくとも2桁の数字([0-9]{2,})と一般的な2桁の数字を加えたものであるため、すべての数字は5桁以上の数字(10000以上)を持ちます。
  • 2番目のパスは4〜9に3桁の数字(4000〜9999)を加えたものです。
  • 3番目のパスは3と6〜9とこれら2つの数字です。これは 3600 から 3999 までのすべての項目と一致します。

答え2

正規表現は数字を比較するのに適していません!

一部のスクリプト言語を使用することをお勧めします。あなたの場合はawkうまくいきます。

awk -F '[^0-9]*' '{for(i=1;i<=NF;i++){ if (int($i)>3600) { print; next; } }}' test.txt

入力に応じて、これに対していくつかの調整を行う必要があります。
たとえば、私の短い例では負の数を正しく処理できません。

答え3

使用grep

for n in $(grep -Po "[0-9]+" test); do if [ $n -ge 3600 ]; then echo $n; fi; done

あなたのファイルの場合ただ5999報告する整数を含みます。0.5999

またはif

grep -Po "[1-9][0-9]{4,}|[4-9][0-9]{3}|3[6-9][0-9]{2}" test

編集する

[1-9]上記の@Phillipposから盗んだ5桁のリードデジタル戦略です。答えは本質的に同じですが、これは読みやすくなります。

関連情報