使用 tr 去除字符但保留换行符

using tr to strip characters but keep line breaks

我正在尝试格式化一些从 UTF-16 转换为 ASCII 的文本,输出如下所示:

C^@H^@M^@M^@2^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
T^@h^@e^@m^@e^@ ^@M^@a^@n^@a^@g^@e^@r^@ ^@f^@o^@r^@ ^@3^@D^@S^@^@^@^@^@^@^@^@^@^@^@^@^@^@

我唯一想要的文字是:

CHMM2
Theme Manager for 3DS

所以每行末尾都有一个换行符“\n”,当我使用

tr -cs 'a-zA-Z0-9' 'newtext' infile.txt > outfile.txt

它也在剥离新行,因此所有文本都在一行中以一个大字符串结束。

任何人都可以帮助弄清楚如何只删除 ^@ 并保留空格和新行吗?

^@肯定是空字符,\0,所以:

tr -d '[=10=]'

会摆脱它们。

但这并不是真正正确的解决方案。您应该简单地使用 iconv 命令将 UTF-16 转换为 UTF-8(有关更多信息,请参见其手册页)。当然,这就是您在这里真正想要完成的事情,这将是正确的方法。

这是一个XY problem。您的问题不是删除空字符。您真正的问题是如何将 UTF-16 转换为 UTF-8 或 US-ASCII(我选择 UTF-8 作为保守答案)。