다음 질문에서 논의된 바와 같습니다:
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
올바른 바이너리가 삭제되었는지 확인하세요.