숫자 범위의 grep 라인

숫자 범위의 grep 라인

아래와 같이 텍스트 파일에 여러 줄이 있습니다. :100, :101to 와 비슷한 :102패턴을 가진 모든 라인을 grep하고 싶습니다 :199. 이와 같이 검색하는 대신 어떻게 이러한 행을 얻을 수 있습니까? :100\|:101\|:102...

abcd fhijk:123
abcd fhijk:124
abcd fhijk:174
abcd fhijk:225

답변1

숫자는 항상 단위, 단항 더하기 기호 또는 기타 수정 사항이 없는 양의 정수라고 가정합니다.

정규식은 숫자를 비교하는 데 적합하지 않지만 입력 데이터를 두 개의 :분리된 열로 처리하는 경우 다음을 사용하여 처리하는 것이 더 쉽습니다 awk.

awk -F ':' '$2 >= 100 && $2 <= 199' <file

이는 데이터의 두 번째로 구분된 필드를 :100 및 199와 비교하고, 숫자가 지정된 범위 내에 있으면 전체 행을 인쇄합니다.

사용할 수도 있지만 grep유연성이 떨어집니다.

grep ':1[0-9][0-9]$' <file

이 표현식은 [0-9]및 사이의 단일 문자와 일치합니다. 표현식을 줄 끝에 고정합니다.09$

100부터 250까지의 숫자가 있는 행을 일치시키려면 199코드를 awk로 변경하면 되지만 250정규식을 사용하려면 다음과 같이 해야 합니다.

grep -E ':(1[0-9][0-9]|2[0-4][0-9]|250)$' <file

여기서 괄호의 세 부분은 100에서 199까지의 숫자와 일치하고 그 다음에는 200에서 249까지, 마지막으로 250과 일치합니다. (나는 "숫자"라고 말하지만 정규식은 항상).

관련 정보