아래와 같이 텍스트 파일에 여러 줄이 있습니다. :100
, :101
to 와 비슷한 :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]
및 사이의 단일 문자와 일치합니다. 표현식을 줄 끝에 고정합니다.0
9
$
100부터 250까지의 숫자가 있는 행을 일치시키려면 199
코드를 awk
로 변경하면 되지만 250
정규식을 사용하려면 다음과 같이 해야 합니다.
grep -E ':(1[0-9][0-9]|2[0-4][0-9]|250)$' <file
여기서 괄호의 세 부분은 100에서 199까지의 숫자와 일치하고 그 다음에는 200에서 249까지, 마지막으로 250과 일치합니다. (나는 "숫자"라고 말하지만 정규식은 항상끈).