Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 尝试从UNIX文件中删除不可打印的字符(垃圾值)_Bash_Unix_Awk_Sed_Non Printing Characters - Fatal编程技术网

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