내 파일의 날짜 형식은 다음과 같습니다 [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
더 나은 솔루션입니다. -o
or 옵션 만 추가하면 됩니다 --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
. 발견되면 플래그를 f
1로 설정합니다. 이 플래그가 설정된 경우에만 행이 인쇄됩니다.
이는 항목이 엄격한 시간순으로 정렬되어 있다고 가정합니다. 즉, 타임스탬프가 표시된 행 뒤에는 "이전" 타임스탬프가 발생할 수 없습니다 start
. 가능성은 낮지만 버퍼링된 로깅을 사용하면 가능합니다.