특정 텍스트를 얻기 위한 트레일 파일

특정 텍스트를 얻기 위한 트레일 파일

텍스트 문자열을 지정하고 줄 수를 지정하는 대신 파일의 마지막 줄부터 첫 번째 줄까지 해당 텍스트를 검색한 다음 그 이후의 줄 전체 또는 지정된 수를 표시할 수 있는 tail과 유사한 Linux 명령이 있습니까? ? 캡처하려는 로그 끝에 있는 내용은 0줄에서 10줄 사이로 다양할 수 있으므로 10줄이 아니면 복사한 로그 파일을 이해할 수 없게 됩니다.

tail 매뉴얼 페이지에서는 라인이나 바이트를 지정하는 기능만 볼 수 있습니다.

답변1

텍스트 문자열을 지정하고 그 뒤에 오는 모든 줄을 표시합니다.

사용할 수 있는 가짜 데이터는 다음과 같습니다.

$ seq 100 > input

...여기서 문자열 "90"을 검색하고 그 뒤의 모든 내용을 표시합니다( $파일 끝까지).

$ sed -n '/90/,$p' input
90
91
92
93
94
95
96
97
98
99
100

보다 유연한 솔루션을 원한다면 변수를 사용하고 sed 따옴표를 변경합니다( $sed의 경우 셸에서 이스케이프 처리).

$ t=96
$ sed -n "/$t/,\$p" input
# or
$ sed -n /$t/,\$p input
96
97
98
99
100

답변2

다음 명령을 사용할 수 있습니다 retail.https://github.com/mwh/retail

출력 시작 및 중지를 위한 정규식을 지원하므로 다음과 같은 것이 필요할 수 있습니다.

retail -r STARTPATTERN mylogfile
retail -r STARTPATTERN -u ENDPATTERN -f mylogfile

-r옵션은 일반적으로 원하는 패턴의 마지막 인스턴스를 명시적으로 찾습니다.

또한보십시오:https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found

다음은 Apache가 여러 번 다시 시작된 Apache 오류 로그를 사용하여 retail마지막 다시 시작한 부분만 추출하는 예입니다.

$ grep -c "Apache.*resuming normal operations" /var/web/logs/error.log
8 
$ retail -r  "Apache.*resuming normal operations" /var/web/logs/error.log
[Wed Jul  6 17:12:55.534567 2016] [mpm_prefork:notice] [pid 17965] AH00163: Apache/2.4.4 (Unix) OpenSSL/1.0.1e configured -- resuming normal operations
[Wed Jul  6 17:12:55.534582 2016] [mpm_prefork:info] [pid 17965] AH00164: Server built: Mar 26 2016 12:22:17
[Wed Jul  6 17:12:55.534598 2016] [core:notice] [pid 17965] AH00094: Command line: '/usr/local/apache2/bin/httpd'

또는 정규식을 사용하여 "(SIGTERM.* shutting down|SIGHUP.*restart)"마지막 종료 또는 다시 시작 시도 이후의 모든 내용을 표시할 수 있습니다.

답변3

일치할 때마다 특정 개수의 컨텍스트 줄을 표시하는 플래그가 grep있는 경우 다음을 수행할 수 있습니다.-A

grep -A 10 'pattern' logfile | less

답변4

완벽함을 위해 다음을 사용하겠습니다 awk. 이 특정 작업에는 필요하지 않지만 매우 강력한 도구이며 해결에 적합한 유형의 문제입니다.

awk '/pattern/{x=1}x{print}'

x패턴이 발견되면 변수를 설정하고 xtrue인 경우 한 줄을 인쇄합니다. 부터 시작하니 참고해주세요첫 번째패턴의 출현.

관련 정보