![정규식에서 3600 이상을 표현하는 방법](https://linux55.com/image/153624/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%97%90%EC%84%9C%203600%20%EC%9D%B4%EC%83%81%EC%9D%84%20%ED%91%9C%ED%98%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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자리 리드 디지털 전략입니다. 대답은 본질적으로 동일하지만 이것이 더 읽기 쉽습니다.