혼합 문자열과 바이너리 파일에서 문자열 추출

혼합 문자열과 바이너리 파일에서 문자열 추출

내 Nokia 백업 파일을 허용되는 vcard 형식으로 변환하려고 합니다. 바이너리 데이터 사이에 유효한 vcard 문자열이 나타납니다. 예를 들어:

!@#JUNKCHARACTERS!@#!@BEGIN:VCARD
VERSION:2.1
N:Jimmy;;;;
TEL;VOICE:4445551212
END:VCARD!@#JUNKCHARACTERS!@#!@

나는 찾기와 바꾸기를 위해 16진수 편집기를 사용해 왔지만 그것조차 지루합니다. grep 또는 다른 명령줄 도구를 사용하여 BEGIN:VCARD및 사이의 모든 문자열을 추출할 수 있습니까 END:VCARD?

답변1

순진하게 말해서 미안하지만 다음과 같은 일은 할 수 없습니다.

strings binary-file > binary-strings-output.txt

그런 다음 문자열 출력을 사후 처리합니까? 다음 내용을 따르세요.

awk '/BEGIN:VCARD/,$NF ~ /END:VCARD/' binary-strings-output.txt

답변2

BEGIN:VCARD시작은 다음과 같습니다. 와 사이의 텍스트만 인쇄합니다 END:VCARD. 이는 END:VCARD와 사이에 항상 개행 문자가 있다고 가정합니다 BEGIN:VCARD.

sed -n -e 's/.*[^A-Z]BEGIN:VCARD/BEGIN:VCARD/' \
       -e 's/END:VCARD[^A-Z].*/END:VCARD/' \
       -e '/BEGIN:VCARD/,/END:VCARD/p'

관련 정보