![연도 범위가 1965-1996인지 grep 또는 egrep을 확인하십시오.](https://linux55.com/image/57621/%EC%97%B0%EB%8F%84%20%EB%B2%94%EC%9C%84%EA%B0%80%201965-1996%EC%9D%B8%EC%A7%80%20grep%20%EB%98%90%EB%8A%94%20egrep%EC%9D%84%20%ED%99%95%EC%9D%B8%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
특정 날짜에 작동하는 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=문자열
답변4
표준 grep
구문을 사용하여 1965~1996 범위의 하위 문자열 번호로 끝나는 줄을 추출합니다.비슷한문제의 사용자가 시도한 것):
grep -e '196[5-9]$' \
-e '197[0-9]$' \
-e '198[0-9]$' \
-e '199[0-6]$'
그러면 관심 있는 숫자로 끝나는 줄이 추출됩니다. 표현식은 일반적으로 인용되어야 합니다.
231974
예를 들어 줄 끝에 (with)가 일치하지 않도록 하려면 패턴의 각 숫자 시작 부분에 삽입할 수 있습니다.1974
\<
grep -e '\<196[5-9]$' \
-e '\<197[0-9]$' \
-e '\<198[0-9]$' \
-e '\<199[0-6]$'
이렇게 하면 숫자가 다른 긴 단어의 하위 문자열이 아닌 단어가 됩니다.