【问题标题】:how can I use linux command sed to process Little-endian UTF-16 file如何使用 linux 命令 sed 处理 Little-endian UTF-16 文件
【发布时间】:2013-07-18 20:15:14
【问题描述】:

我正在开发一个关于 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。

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

【问题讨论】:

    标签: shell utf-16 endianness


    【解决方案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 开关,直到您知道它可以工作为止。

    【讨论】:

    • +1 好建议。你能解释一下这个“sed 1q check-free-ip.to.rdpzhitong.rdp;”吗? “1q”是干什么用的?
    • sed 的“q”标志表示在 n 行后退出,类似于(并且比“head”命令更早)。
    【解决方案2】:

    如果文件是 UTF-16 编码文本(如 RDP is),并且这不是您当前的编码(不太可能在 Linux 上),那么您可以使用 iconv 对文件进行预处理和后处理.例如:

    iconv -f utf-16 -t us-ascii <rdpzhitong.rdp |
     sed 's/original/modified/' |
     iconv -f us-ascii -t utf-16 >rdpzhitong.rdp.modified
    

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多