删除所有包含空字节/损坏数据的行

删除所有包含空字节/损坏数据的行

因此,我从旧硬盘中恢复了一个文本文件,但未能完全恢复所有数据。未正确恢复的数据已返回为空字节。如何从包含这些字节的文件中删除每一行?

损坏数据的示例

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 删除包含空字节的所有行

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 的任何行。

相关内容