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桁のリードデジタル戦略です。答えは本質的に同じですが、これは読みやすくなります。