Bash 尝试从UNIX文件中删除不可打印的字符(垃圾值)
我正在尝试从文件中的记录中删除不可打印字符(例如,Bash 尝试从UNIX文件中删除不可打印的字符(垃圾值),bash,unix,awk,sed,non-printing-characters,Bash,Unix,Awk,Sed,Non Printing Characters,我正在尝试从文件中的记录中删除不可打印字符(例如,^@)。由于文件中要记录的卷太大,所以不能使用cat,因为循环占用的时间太长。 我试着用 sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILENAME awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print } FILENAME > NEW FILE 但这也无济于事
^@
)。由于文件中要记录的卷太大,所以不能使用cat,因为循环占用的时间太长。
我试着用
sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILENAME
awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print } FILENAME > NEW FILE
但这也无济于事
有人能提出一些替代方法来删除不可打印的字符吗
使用了
tr-cd
,但它正在删除重音字符。但是它们在文件中是必需的。也许您可以使用[:print://code>的补码,该补码包含所有可打印字符:
tr -cd '[:print:]' < file > newfile
首先删除所有控制字符:
tr -dc '\007-\011\012-\015\040-\376' < file > newfile
tr-dc'\007-\011\012-\015\040-\376'newfile
然后尝试您的字符串:
sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' newfile
sed-i的/[^@a-zA-Z 0-9`~!@$%^&*(\+\[\]\{}}}\\\\};'\'':,.\/?]///g'新文件
我相信你看到的^@
实际上是一个零值\0
上面的tr
过滤器也将删除这些内容
strings -1 file... > outputfile
似乎可以工作使用哪种语言(unix参数)?已在unix框中创建了一个正常的/bin/sh脚本。此脚本将运行一个包含2500万个重新记录的文件,并从db获取数据。但是此脚本将忽略具有垃圾值的记录。如果您看到大量空值(0x00、\0000)字符,它可能是某种多字节编码。如果是这种情况,这些不是“垃圾”“角色。我所知道的最简单的检查方法是将文件或其部分加载到emacs
.Oop中。我刚找到这个。我知道这将比emacs快。该回复非常简短,缺乏最低限度的解释,因此它是删除的候选。请尝试添加有关您建议的命令的更多说明。
strings -1 file... > outputfile