删除 Bash 中无效的非 ASCII 字符

2 bash ascii utf non-ascii-characters

在 Bash(在 Ubuntu 上)中,是否有一个命令可以删除无效的多字节(非 ASCII)字符?

我已经尝试过perl -pe 's/[^[:print:]]//g',但它也会删除所有有效的非 ASCII 字符。

如果需要,我可以使用sed或类似的实用程序。awk

rua*_*akh 5

问题是 Perl 没有意识到你的输入是 UTF-8;它假设它正在对字节流进行操作。您可以使用该-CI标志告诉它将输入解释为 UTF-8。而且,由于您的输出中将包含多字节字符,因此您还需要告诉 Perl 在写入标准输出时使用 UTF-8,这可以通过使用 标志来完成-CO。所以:

perl -CIO -pe 's/[^[:print:]]//g'
Run Code Online (Sandbox Code Playgroud)