특정 시간(포함) 이후 파일의 모든 항목을 인쇄합니다.

특정 시간(포함) 이후 파일의 모든 항목을 인쇄합니다.

내 파일의 날짜 형식은 다음과 같습니다 [1/24/21 9:19:20:183 MYT].

이 순간부터 파일 끝까지 타임스탬프가 찍힌 모든 항목을 인쇄하고 싶습니다. 이 작업을 수행하려면 어떻게 해야 합니까 sed?

답변1

날짜만 인쇄하시겠습니까, 아니면 날짜가 포함된 전체 줄을 인쇄하시겠습니까?

전체 줄을 인쇄하려면 을 사용 grep '\[1/24/21 9:19:20:183 MYT\]' file하지만, 굳이 고집한다면 sed를 사용하여 수행할 수도 있습니다 sed -n '/\[1\/24\/21 9:19:20:183 MYT\]/p' file.

grep -F편집: 아래 첫 번째 설명에서 freddy 사용자가 제안한 대로 백슬래시를 사용하여 보기 흉한 것을 피할 수 있습니다.

-n옵션을 사용하면 프로그램이 명시적으로 인쇄하는 경우에만 행이 표시됩니다 sed. 이 p명령은 해당 행을 명시적으로 인쇄합니다.

날짜만 인쇄하는 것도 grep더 나은 솔루션입니다. -oor 옵션 만 추가하면 됩니다 --only-matching. 그것도 가능하겠지만 sed나보다 더 많은 기술이 필요할 것이다.

편집: OP에는 실제로 다른 요구 사항이 있었고 질문을 수정했습니다. 행의 범위를 지정할 수 있습니다 sed. "[1/24/21 9:19:20:183 MYT]가 포함된 행부터 끝까지"라고 쓰여 있습니다 /\[1\/24\/21 9:19:20:183 MYT\]/,$. 달러 기호는 마지막 줄을 나타냅니다. 그래서:

sed -n '/\[1\/24\/21 9:19:20:183 MYT\]/,$p' file

답변2

이것이 필요하지 않은 경우 sed다음 awk절차가 작동합니다.

awk -v start="[1/24/21 9:19:20:183 MYT]" 'index($0,start)==1{f=1} f' file

이는 변수에 지정된 문자열로 시작하는 줄을 찾을 때까지 파일을 구문 분석합니다 start. 발견되면 플래그를 f1로 설정합니다. 이 플래그가 설정된 경우에만 행이 인쇄됩니다.

이는 항목이 엄격한 시간순으로 정렬되어 있다고 가정합니다. 즉, 타임스탬프가 표시된 행 뒤에는 "이전" 타임스탬프가 발생할 수 없습니다 start. 가능성은 낮지만 버퍼링된 로깅을 사용하면 가능합니다.

관련 정보