我试图删除不可打印的字符(例如^@
)从记录在我的文件。由于卷记录在文件中太大,使用cat不是一个选项,因为循环花费太多时间。我尝试使用
sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILENAME
字符串
但是^@
字符仍然没有被删除。我还尝试使用
awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print } FILENAME > NEW FILE
型
但也无济于事
有人能提出一些替代方法来删除不可打印的字符吗?
使用了tr -cd
,但它正在删除重音字符。但它们在文件中是必需的。
4条答案
按热度按时间iqxoj9l91#
也许你可以使用
[:print:]
的补码,它包含所有可打印的字符:字符串
如果您的
tr
版本不支持多字节字符(似乎很多版本都不支持),我可以使用GNU sed(使用UTF-8语言环境设置):型
jaxagkaj2#
首先删除所有控制字符:
字符串
试试你的字符串:
型
我相信你看到的
^@
实际上是一个零值\0
。上面的
tr
过滤器也会删除这些。5jdjgkvh3#
我花了一段时间寻找这个问题,找到了一个简单的解决方案:
ansifilter
包就是这样做的,你所需要做的就是通过它输出。在Mac上:
brew install ansifilter
个然后又道:
cat file.txt | ansifilter
个2nbm6dog4#
字符串
字符串程序将获取所有可打印的字符,在本例中长度为1(参数为-1)并打印它们。它有效地删除了所有不可打印的字符。
“man strings”将提供文档。