몇 가지 간단한 무한 루프가 포함된 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
무한 루프 조건 확인