반달가면 이글루에서 백업 - http://bahndal.egloos.com/586095
grep 명령은 주로 텍스트 파일에서 문자열을 검색할 때 사용하지만, 바이너리 파일에서 통상 16진수로 표현되는 특정 데이터를 검색하는 것도 가능하다. 물론 hexdump를 이용해서 바이너리 파일을 16진수 텍스트로 변환한 후에 grep 명령을 조합하여 사용해도 되나, grep 명령만으로 더 간편하게 검색할 수 있는 방법이 있다. -P 옵션을 활용해서 Perl 정규표현식(Perl regular expression)을 인자로 사용하면 된다.
예를 들어 my_data.bin 파일에서 16진수 0x0800 포함 여부를 확인하는 경우를 생각해 보자. 터미널 창에서 아래와 같이 입력하면 된다.
# my_data.bin 파일에 0x0800 포함 여부 확인
grep -P "\x08\x00" my_data.bin
만약 my_data.bin 파일에 해당 데이터가 있다면 "Binary file my_data.bin matches"라는 메세지가 출력될 것이다. 각 16진수마다 "\x"를 붙여주어야 함에 유의하자. 위의 예시를 보자면 "\x0800"이 아니라 "\x08\x00"이다.
만약 해당 데이터가 몇번 출현했는지 알고 싶다면 -c 옵션을 추가하면 된다.
# my_data.bin 파일에 포함된 0x0800 개수 출력(-c 옵션)
grep -P -c "\x08\x00" my_data.bin
만약 파일 이름만 출력하고 싶다면 -l 옵션을 사용하자. 여러개의 바이너리 파일에 대해 검색을 할 경우에 요긴하다.
# 확장자가 bin인 파일중에 0x0800이 포함된 파일 이름만 출력(-l 옵션)
grep -P -l "\x08\x00" *.bin
'bash script' 카테고리의 다른 글
[bash: sed] sed에서 영역 구분을 이용한 문자열 재구성 작업 (역슬래시-괄호) (0) | 2023.07.19 |
---|---|
[bash: curl] ftp 접속에서 여러 서버 또는 여러 파일에 대한 업로드 자동화 (0) | 2023.07.19 |
[bash: awk] awk에서 출력할 문자열을 변수로 지정하기 (0) | 2023.07.14 |
[bash: curl] curl을 이용한 FTP 자동 접속 (0) | 2023.07.11 |
리눅스 bash 스크립트에서 텍스트 파일을 읽어서 한 줄씩 배열(array) 원소로 할당하기 (0) | 2023.07.11 |