Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

enter image description here

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

like image 749
liuan Avatar asked Jul 19 '13 13:07

liuan


2 Answers

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
like image 134
Joe Avatar answered Sep 20 '22 23:09

Joe


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.

like image 25
Marty McGowan Avatar answered Sep 16 '22 23:09

Marty McGowan