텍스트 파일(예: bash_history)에서 "바이너리 데이터"를 제거하는 방법은 무엇입니까?

텍스트 파일(예: bash_history)에서 "바이너리 데이터"를 제거하는 방법은 무엇입니까?

다음 질문에서 논의된 바와 같습니다:

grep은 바이너리라고 생각되는 파일 처리를 중지할 수 있습니다.

이는 일반적으로 큰 문제가 아니지만 텍스트 파일을 검색할 때 일부 텍스트 파일이 "더러운" 것으로 밝혀지는 경우가 있습니다. 즉, 일부 바이너리 데이터가 포함되어 있는 경우입니다.

제가 이 질문을 하는 구체적인 상황은 어떻게든 일부 바이너리 데이터(grep이 바이너리라고 생각하는 것은 무엇이든 참조된 질문 참조)가 파일에 들어가서 .bash_history삭제하고 싶다는 것입니다.

텍스트 파일에서 이진 데이터를 제거하는 방법은 무엇입니까?

바이너리 데이터를 삭제하는 것보다 바이너리 데이터에 문제가 있는 것이 무엇인지 확인(grep)하여 필요하거나 중요한 항목을 삭제하지 않도록 하고 싶습니다.

답변1

cat -v .bash_history > newbashhistory

newbashhistory를 확인하고 마음에 드는지 결정하세요.

답변2

텍스트가 아닌 데이터가 포함된 행을 보는 한 가지 방법은 다음과 같습니다.

perl -nle 'print if m/[^ -~\t\r]/' .bash_history | hexdump -C

기본적으로 문자와 일치하면 줄을 인쇄합니다.아니요( ^)는 물결표 범위(주석에 따라 인쇄 가능한 항목 ascii(7)) 또는 텍스트가 아닌 다른 문자(줄 바꿈은 플래그에 의해 마술처럼 처리되어야 함 -l)의 공백에 있습니다.

이 줄의 바이너리 내용이 삭제 가능한 것으로 나타나면 다음을 통해 삭제할 수 있습니다.

perl -i.whoopsie -ple 's/[^ -~\t\r]//g' .bash_history

그럼 어쩌면 사용할 수도 있습니다

cmp -l .bash_history.whoopsie .bash_history

올바른 바이너리가 삭제되었는지 확인하세요.

관련 정보