使用tr来删除字符但保留换行符

时间:2016-02-22 02:26:16

标签: linux tr

我正在尝试格式化一些从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

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

任何人都可以协助找出如何仅删除^ @并保留空格和新行吗?

1 个答案:

答案 0 :(得分:0)

^@绝对是空字符,\ 0s,所以:

tr -d '\0'

将摆脱他们。

但这不是真正正确的解决方案。您只需使用iconv命令将UTF-16转换为UTF-8(有关详细信息,请参阅其手册页)。当然,这就是你在这里真正想要完成的事情,这将是正确的方法。

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