![sed 또는 awk를 사용하여 파일에서 특정 줄을 추출하는 방법](https://linux55.com/image/64404/sed%20%EB%98%90%EB%8A%94%20awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EC%A4%84%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
파일에서 날짜(예: "5월 1일")로 시작하는 모든 줄을 검색하려면 sed 또는 awk를 사용하여 어떻게 해야 합니까? 이 데이터를 추출하여 화면이나 파일로 보내야 합니다. 감사해요.
답변1
다음으로 시작하는 줄을 추출하려면 May 1
:
grep "^May 1\b" file
또는:
sed -n '/^May 1\>/p' file
또는:
awk '/^May 1\>/' file
\>
위의 두 가지 에서는 단어 경계 정규식을 지원하는 GNU awk 또는 sed와 같은 도구가 있다고 가정합니다 . 단어 경계의 목적은 정규식 일치를 방지하는 것입니다(예: ) May 10
.
더
5월의 어느 날을 찾고 계시다면:
grep -E "^May [[:digit:]]{1,2}\b" file
어느 달의 특정 날짜를 찾고 있는 경우:
grep -E "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [[:digit:]]{1,2}\b" file
답변2
printf %s\\n 'Apr 30 aaa' \
'May 1 bbb' \
'Feb 29 ccc' \
'Feb 30 ddd' |
sed -n '/^\(Apr\|Jun\|Sep\|Nov\) \([1-9]\|[12][0-9]\|30\)\>/p
/^\(Jan\|Mar\|Jul\|Aug\|May\|Oct\|Dec\) \([1-9]\|[12][0-9]\|3[01]\)\>/p
/^\(Feb\) \([1-9]\|[12][0-9]\)\>/p'
산출:
Apr 30 aaa
May 1 bbb
Feb 29 ccc