그래서 기존 하드 드라이브에서 텍스트 파일을 복구했지만 모든 데이터를 완전히 복구할 수는 없었습니다. 올바르게 복구되지 않은 데이터는 널 바이트로 반환되었습니다. 이러한 바이트가 포함된 파일에서 모든 줄을 어떻게 제거할 수 있습니까?
손상된 데이터의 예
xE3
xAF
xE2
xBF
NUL
xBD
더 많은 것이 있습니다...
NULL이 \x00과 같다는 것을 알고 있습니다.
바이트를 개별적으로 삭제하는 대신 sed를 사용하여 손상된 데이터가 포함된 모든 줄을 삭제하려면 어떻게 해야 합니까?
바이트/손상된 데이터에는 다양한 변형이 있으며 정규식으로 이를 모두 찾아낼 수 있을지 의문입니다.
답변1
바이트 0 또는 바이트 128~255가 포함된 줄을 삭제하려면 다음을 사용할 수 있습니다.
perl -ne 'print unless /[\0\200-\377]/'
또는 grep
PCRE 지원과 함께 GNU를 사용하십시오.
LC_ALL=C grep -vaP '[\0\200-\377]'
strings
데이터에서 인쇄 가능한 텍스트를 추출하는 명령 도 참조하세요 .
이 바이트를 제거하려면:
tr -d '\0\200-\377'
답변2
다음 Perl 명령을 시도해 볼 수 있습니다.
<in_file perl -lne's/\0//g; print if $_'
in_file
입력입니다. 파이프 리디렉션을 사용할 수 있습니다.
전역적으로 NUL을 제거합니다. 필요에 맞게 정규식을 조정할 수 있습니다.
답변3
yourfile
gnu sed를 사용하여 null 바이트가 포함된 모든 줄을 제거 할 수 있습니다 .
sed '/\x0/d' yourfile
이는 파이프에서도 작동합니다.
cat yourfile | sed '/\x0/d'
답변4
예. 다음을 수행할 수 있습니다.
sed -e '/\x00/d' [filename] > [new_filename]
파일을 내부에서 편집하려는 경우:
sed -i '/\x00/d' [filename]
두 가지를 결합하여 원본 파일을 변경하고 백업 복사본을 보관할 수도 있습니다.
sed -i~ '/\x00/d' [filename]
이렇게 하면 파일에서 최소 1개의 NULL을 포함하는 모든 줄이 삭제됩니다.