sed는 일부 텍스트를 일치시키고 래핑합니다.

sed는 일부 텍스트를 일치시키고 래핑합니다.

최대 10개의 마커를 시각화 하려고 하지만 가상 데이터 소스가 뷰어 이고 뷰어인 65 72 62 65새 줄의 시퀀스 뒤에 최소 1개의 마커를 시각화하려고 합니다. 암호hexdump -v /usr/bin/telnetless

hexdump -v /usr/bin/telnet                        \
  | sed 's/65 72 62 65[a-z0-9]\{1,10\}/&...\n/g'  \
                                                  \
  | less -s -M +Gg

실패한 출력은 다음과 같으며 입력의 시작 부분을 포함합니다. 반면 첫 번째 일치 항목으로 시작하고 그 이후 개행의 다음 일치 항목까지 몇 개의 문자만 포함해야 합니다.

0000000 cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00
...

원하는 출력

65 72 62 65 000edf0 72 ...
65 72 62 65 72 6f 73 20 56 ...
65 72 62 65 72 6f 73 20 56 ...
...

개행 문자에서 일치 항목과 그 뒤의 일부 텍스트만 시각화하는 방법은 무엇입니까?

답변1

문자열에서 일치하는 부분만 인쇄하려면 원하는 문자열 앞뒤의 모든 항목과 일치하는 문자열을 사용하고 이를 문자열로 바꿀 수 있습니다.

 sed 's/.*\(65 72 62 65 .\{1,10\}\).*/\1.../'

답변2

 sed -n 's/65 72 62 65[[:hexdigit:] ]\{1,10\}/&...\n/;/\n/P'

거의 다 왔습니다. P다르게 인쇄 하면됩니다 . 이 명령은 지정된 문자열 줄의 첫 번째 항목 이후 줄의 시작 부분부터 인쇄합니다. 반대 작업을 수행하고 첫 번째 일치 항목의 시작부터 줄 끝까지 인쇄하려면...

    sed '/\n/P;//d;s/65 72 62 65[[:hexdigit:] ]\{1,10\}/\n&...\n/;D' 

...그거 작동해요.

관련 정보