TAB으로 시작하는 여러 줄과 그룹의 첫 번째 줄 앞의 줄을 일치시키는 방법은 무엇입니까?

TAB으로 시작하는 여러 줄과 그룹의 첫 번째 줄 앞의 줄을 일치시키는 방법은 무엇입니까?

일부 타사 로그 파일이 있고 명령줄에서 오류를 추출하려고 합니다.

로그는 다음과 같습니다.

time=1
time=2
time=3
  at com.test.com....
  at com.test.com....
  at com.test2.com....
time=4
time=5
time=6
time=7
time=8
time=9
  at org.badstuff.com...
  at org.badstuff.com...
  at org.badstuff.com...
time=10
time=11

로 시작하는 줄은 atTAB 문자로 시작하므로 쉽게 일치시킬 수 있습니다.

이 파일에서 이러한 스택 추적을 어떻게 추출할 수 있습니까?그리고매번 첫 번째 스택 추적 이전에는 몇 줄이 있습니까? 저는 Mac을 사용하고 있지만 가능하다면 Mac/Linux에서 실행되는 범용 솔루션을 선호합니다. 두 가지 모두에서 자주 작업해야 하기 때문입니다.

위의 예에서 다음을 얻습니다.

time=2
time=3
  at com.test.com....
  at com.test.com....
  at com.test2.com....
time=8
time=9
  at org.badstuff.com...
  at org.badstuff.com...
  at org.badstuff.com...

답변1

예를 들어 -Aafter 컨텍스트, -Before 컨텍스트 또는 -C컨텍스트 옵션을 사용하십시오 .grep

grep -B2 '^\t' file

답변2

grep -B2 -P '^\t' logfile각 게임 세트 전에 두 줄을 선택하는 데 사용됩니다 . 일치 항목 사이에 삽입된 그룹 구분 기호 "--"를 가려야 할 수도 있습니다.

결과

$ grep -B2 -P '^\t' /tmp/t
time=2
time=3
        at com.test.com....
        at com.test.com....
        at com.test2.com....
--
time=8
time=9
        at org.badstuff.com...
        at org.badstuff.com...
        at org.badstuff.com...

관련 정보