sed에서 역방향 일치, 발견된 반대 항목 교체

sed에서 역방향 일치, 발견된 반대 항목 교체

내 시스템 로그에 다음과 같은 출력이 있다고 가정합니다.

precalculated src_hash => 20 bytes @ 0x7f811c001e20
A6 2D E5 CD 2A BA F0 42 56 66 19 D4 61 1A E3 A0  .-..*..BVf..a...
C7 5E 5F 77                                      .^_w
precalculated dst_hash => 20 bytes @ 0x7f811c0020d0
15 EC 34 59 89 0F 4F F8 C5 68 3A DC BB 09 27 91  ..4Y..O..h:...'.
5D C1 E7 28                                      ]..(

내 목표는 오른쪽에 있는 ASCII 쓰레기를 제거하고 해시된 16진수 바이트만 남기고 변수 이름으로 시작하는 줄을 저장하는 것입니다. 내가 사용하는 정규식은

(^([a-zA-Z_]+\s+)+[=]{1}) | (^([a-zA-Z0-9]{2}[\s]{1})+)

변수 이름이나 해당 값이 포함된 16진수 문자열로 시작하는 행과 정확하게 일치합니다. 스트림에서 "기타" 콘텐츠를 제거하기 위해 sed가 일치하는 항목을 되돌릴 수 있는 방법이 있나요? 어떻게든 파일로 전송할 수 있나요?

답변1

sed -e '/^precalculated/!s/^\(.\{47\}\).*$/\1/' < h

precalculated이렇게 하면 처음에 일치하지 않는 줄의 처음 47자가 유지됩니다 . 일치하는 줄은 단순히 복사됩니다.

답변2

나는 다음과 같은 패턴을 발견했습니다.

sed  -e 's/^\(..\s.\{45\}\).*/\1/'

답변3

공백으로 구분된 16진수 쌍의 초기 시퀀스를 대체 그룹으로 일치시킨 다음 그룹을 다시 바꿀 수 있습니다.

sed -r 's/^(([[:xdigit:]]{2}\s+)+).*$/\1/'

관련 정보