grep: 이중 캡처를 사용하여 여러 줄 패턴 감지

grep: 이중 캡처를 사용하여 여러 줄 패턴 감지

몇 가지 간단한 무한 루프가 포함된 test.s라는 파일이 있습니다.

.LBB7_7:
        branch .LBB7_7

레이블은 완전히 다를 수 있지만 모두 .LBB\d_\d+처럼 보입니다.

나는 grep이나 sed 한 줄로 이런 일을 할 수 있는 영리한 방법을 원합니다.

이제 그것이 내가 하는 일입니다. 먼저 모든 라벨을 계산합니다.

grep -oP 'branch .\KLBB\d_\d+' minimize.s

그런 다음 bash for 루프에서 아래 줄의 레이블을 찾아 grep -A1 "^.$i:"출력을 확인합니다.branch $i

더 잘할 수 있을까요(명시적인 bash 처리 없이 grep을 사용하면 됩니다)?

답변1

이 시도:

$ cat ip.txt
foo
baz
.LBB7_7:
        branch .LBB7_7
xyzyadsf
.LBB8_3:
    mov a, b
        branch .LBB8_3
nop

$ grep -zoP '(\.LBB\d_\d+):\s*branch\h+\1\n' ip.txt
.LBB7_7:
        branch .LBB7_7
  • -z기본 개행 문자 대신 ASCII NUL이 레코드 구분 기호로 사용됩니다. 입력에 NUL 문자가 없다고 가정하면 전체 파일이 삼켜집니다.
  • (\.LBB\d_\d+)태그를 캡처하지만 줄 시작 부분에서 일치를 지정할 수 없습니다.
  • :\s*branch\h+\1\n무한 루프 조건 확인

관련 정보