정규식에서 3600 이상을 표현하는 방법

정규식에서 3600 이상을 표현하는 방법

3600보다 크거나 같은 숫자와 일치하도록 이 정규식을 작성했습니다. 이것이 나의 시도이다. 그러나 완료되었는지 확실하지 않습니다.

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

나는 단지 양의 십진 정수를 의미합니다(부동수, 음수, 8진수, 16진수, 로마 숫자 등은 생각할 필요가 없습니다...).

답변1

([1-9][0-9]{2,}|[4-9][0-9]|3[6-9])[0-9]{2}주변에 음수, 부동 소수점, 천 단위 제한자 등이 없다고 확신할 수 있는 경우 확장 정규식이 해당 작업을 수행해야 합니다.

이 표현식에는 세 개의 경로가 있으며, 모든 경로의 공통점은 마지막 부분 [0-9]{2}인 두 자리 숫자입니다.

  • 첫 번째 경로는 1~9에 최소 두 자리 숫자( [0-9]{2,})와 일반적인 두 자리 숫자를 더한 것이므로 모든 숫자는 다섯 자리 이상의 숫자(10000 이상)를 갖습니다.
  • 두 번째 경로는 4~9에 3자리 숫자(4000~9999)를 더한 것입니다.
  • 세 번째 경로는 3과 6~9와 이 두 숫자입니다. 이는 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자리 리드 디지털 전략입니다. 대답은 본질적으로 동일하지만 이것이 더 읽기 쉽습니다.

관련 정보