ヌルバイト/破損したデータを含むすべての行を削除します。

ヌルバイト/破損したデータを含むすべての行を削除します。

そのため、既存のハードドライブからテキストファイルを回復しましたが、すべてのデータを完全に回復することはできませんでした。正しく回復されなかったデータはヌルバイトで返されました。これらのバイトを含むファイルからすべての行をどのように削除できますか?

破損したデータの例

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]
2つを組み合わせて元のファイルを変更し、バックアップコピーをアーカイブすることもできます。
sed -i~ '/\x00/d' [filename]
これにより、ファイルから少なくとも1つのNULLを含むすべての行が削除されます。

関連情報