【发布时间】:2024-01-14 18:21:02
【问题描述】:
我正在尝试从我的文件中的记录中删除不可打印的字符(例如 ^@)。由于文件中的记录量太大,因此使用 cat 不是一个选项,因为循环花费了太多时间。
我尝试使用
sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILENAME
但^@ 字符仍然没有被删除。
我也尝试使用
awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print } FILENAME > NEW FILE
但它也没有帮助。
谁能建议一些替代方法来删除不可打印的字符?
使用了tr -cd,但它正在删除重音字符。但它们在文件中是必需的。
【问题讨论】:
-
使用哪种语言(unix参数)?
-
已在 unix 框中创建了一个普通的 /bin/sh 脚本。该脚本将运行一个包含 2500 万条记录的文件,并从 db 中获取数据。但是,此脚本将省略具有垃圾值的记录。
-
如果您看到很多 NULL (0x00, \0000) 字符,可能是某种多字节编码。 如果是这种情况,这些不是“垃圾”字符。 我知道的最简单的检查方法是将文件或其中的一部分加载到
emacs。 -
哎呀。我刚发现这个。我知道这会比
emacs快。 Check if file contains multibyte character
标签: bash unix awk sed non-printing-characters