널 바이트/손상된 데이터를 포함하는 모든 행을 제거하십시오.

널 바이트/손상된 데이터를 포함하는 모든 행을 제거하십시오.

그래서 기존 하드 드라이브에서 텍스트 파일을 복구했지만 모든 데이터를 완전히 복구할 수는 없었습니다. 올바르게 복구되지 않은 데이터는 널 바이트로 반환되었습니다. 이러한 바이트가 포함된 파일에서 모든 줄을 어떻게 제거할 수 있습니까?

손상된 데이터의 예

xE3
xAF
xE2
xBF
NUL
xBD

더 많은 것이 있습니다...

NULL이 \x00과 같다는 것을 알고 있습니다.

바이트를 개별적으로 삭제하는 대신 sed를 사용하여 손상된 데이터가 포함된 모든 줄을 삭제하려면 어떻게 해야 합니까?

바이트/손상된 데이터에는 다양한 변형이 있으며 정규식으로 이를 모두 찾아낼 수 있을지 의문입니다.

답변1

바이트 0 또는 바이트 128~255가 포함된 줄을 삭제하려면 다음을 사용할 수 있습니다.

perl -ne 'print unless /[\0\200-\377]/'

또는 grepPCRE 지원과 함께 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

yourfilegnu 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을 포함하는 모든 줄이 삭제됩니다.

관련 정보