grep 또는 egrep 연도 범위는 1965-1996입니다.

grep 또는 egrep 연도 범위는 1965-1996입니다.

일부 날짜에는 작동하는 grep이 있지만 두뇌가 완전히 작동하도록 만드는 데 어려움을 겪고 있습니다.

grep 19[6-9][5-6]$ filename

몇 개는 정확하게 잡았지만 저는 1965년부터 1996년까지의 모든 연도를 잡으려고 합니다.

현재 솔루션은 다음과 같습니다. 실제로 한 줄을 찾고 있지만 지금까지 얻은 내용은 다음과 같습니다.

grep 196[5-9]$ filename
grep 197[0-9]$ filename
grep 198[0-9]$ filename
grep 199[0-6]$ filename

가능하다면 더 좋고 더 짧은 것을 찾고 계십니까?

답변1

날짜 범위와 정규식은 그다지 일치하지 않습니다. grep의 $를 올바르게 해석하면 날짜는 줄의 마지막 필드입니다.

이 시도:

awk '$NF >= 1965 && $NF <= 1996' filename

grep을 사용해야 한다면 더 복잡해집니다.

grep -E '196[5-9]|19[78][0-9]|199[0-6]$' filename

답변2

다음과 같이 를 제외 egrep할 수 있다는 점에 유의해야 합니다 .19

grep -E '19(6[5-9]|[78][0-9]|9[0-6])$' filename

더 명확하다고 간주 될 수 있습니다.

답변3

seq훨씬 더 읽기 쉬운 것을 사용할 수도 있습니다 .

grep -E "$(seq -s "|" 1965 1996)" filename

-s, --separator=STRING

답변4

표준 grep구문을 사용하여 1965년부터 1996년까지의 범위에 있는 하위 문자열 번호로 끝나는 줄을 추출합니다.비슷한질문에 있는 사용자의 시도에 따라):

grep -e '196[5-9]$' \
     -e '197[0-9]$' \
     -e '198[0-9]$' \
     -e '199[0-6]$'

이렇게 하면 관심 있는 숫자로 끝나는 줄이 추출됩니다. 일반적으로 표현식은 인용되어야 합니다.

예를 들어 줄 끝에서 231974( 와 일치하는 ) 일치를 방지하려면 패턴의 각 숫자 시작 부분에 삽입할 수 있습니다.1974\<

grep -e '\<196[5-9]$' \
     -e '\<197[0-9]$' \
     -e '\<198[0-9]$' \
     -e '\<199[0-6]$'

이렇게 하면 숫자가 다른 긴 단어의 하위 문자열이 아닌 단어가 됩니다.

관련 정보