bash script2023. 8. 23. 13:49

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/607182

sed에서 문자열이 아니라 16진수값을 대체할 수도 있다. 따라서 텍스트 파일뿐만 아니라 바이너리 파일에 대해서도 대체 기능을 사용할 수 있다(sed를 이용한 문자열 대체의 기본은 이전 게시물을 참고하자. 여기로). 아래의 예시를 보자.

 

# my_file.dat에서 모든 0xff를 0xf0으로 대체, my_file.mod.dat로 저장
sed 's/\xff/\xf0/g' my_file.dat > my_file.mod.dat

16진수를 나타내기 위해 'x'를 사용하는데, 문자 x를 의미하는 것이 아니므로 역슬래시(\)를 추가해 주어야 한다. 즉 \xff는 0xff를 의미하게 된다. 만약 연속되는 16진수값을 대체할 경우에는 각 값마다 \x를 붙인다. 아래의 예시를 보자.

# my_file.dat에서 모든 0x0800을 0xf0으로 대체, my_file.mod.dat로 저장
sed 's/\x08\x00/\xf0/g' my_file.dat > my_file.mod.dat

한가지 유의할 점이 있다. sed가 기본적으로 텍스트 작업용이라서 그런지, 줄바꿈(new line, \n, 0x0a)에 해당되는 0x0a는 대체되지 않는다. 줄바꿈을 기준으로 한줄씩 읽어서 작업하기 때문에 줄바꿈 자체는 작업 대상에서 제외되는 것이다.

만약 줄바꿈 자체를 다른 것으로 대체하려면 tr을 사용해야 된다. (tr에 대한 내용은 이전 게시물을 참고하자. 여기로)

728x90
Posted by 반달가면