how can I use linux command sed to process Little-endian UTF-16 file

☆樱花仙子☆ 提交于 2019-12-06 04:54:28

问题


I am working on an application about windows rdp. Now I get a problem when I try to use the sed command to replace the string of IP address directly in the rdp file. But after executing this command, the origin rdp file is garbled.

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

I find that the file's format is Little-endian UTF-16 Unicode.

Can I still use the sed command to replace the text in the files correctly? Or other method to process this problem?


回答1:


If the file is UTF-16 encoded text (as RDP is), and that is not your current encoding (it's not likely to be on Linux) then you can pre- and post-process the file with iconv. For example:

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



回答2:


if you can cat the file, then you may use sed. no harm in trying before you ask the question.

if the check-free-ip.to.rdpzhitong.rdp file has any text, you may want to do this:

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

also, a little advice. try without the -i switch, until you know it's working.



来源:https://stackoverflow.com/questions/17747864/how-can-i-use-linux-command-sed-to-process-little-endian-utf-16-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!