如何使用linux命令sed处理Little-endian UTF-16文件

时间:2013-07-19 13:53:05

标签: shell utf-16 endianness

我正在开发一个关于windows rdp的应用程序。现在,当我尝试使用sed命令直接替换rdp文件中的IP地址字符串时,我遇到了问题。但执行此命令后,原始rdp文件出现乱码。

sed -i "s/address:s:.*/address:s:$(cat check-free-ip.to.rdpzhitong.rdp)/" rdpzhitong.rdp

我发现该文件的格式是Little-endian UTF-16 Unicode。

enter image description here

我仍然可以使用sed命令正确替换文件中的文本吗?还是其他方法来处理这个问题?

2 个答案:

答案 0 :(得分:14)

如果文件是UTF-16编码文本(如RDP is),并且这不是您当前的编码(它不可能在Linux上),那么您可以使用{预处理和后处理文件{1}}。例如:

iconv

答案 1 :(得分:1)

如果您 cat 该文件,则可以使用 sed 。在提出这个问题之前没有任何伤害。

如果 check-free-ip.to.rdpzhitong.rdp 文件有任何文本,您可能需要这样做:

address=$(sed 1q check-free-ip.to.rdpzhitong.rdp)
sed -i "s/address:s:.*/address:s:$address/" rdpzhitong.rdp
还有一点建议。尝试没有-i开关,直到你知道它正在工作。