我试图将旧的PortaPuTTY配置文件翻译为KiTTY的配置文件格式。
PortaPutty使用' Field = Value'格式,KiTTY使用' Field \ Value \'格式。
我可以通过以下方式将PortaPuTTY翻译成KiTTY格式:
sed -i -e' s / = / \ / g' -e' s /.$/\/'
所以
LogFileName=putty.log
LogType=0
...
被翻译为:
LogFileName\putty.log\
LogType\0\
...
等
但是,在KiTTY格式中,特殊字符将转换为打印的十六进制格式。例如:
PublicKeyFile=C:\Users\user.name\mykey.ppk
需要翻译成:
PublicKeyFile\C%3A%5CUsers%5Cuser.name%5Cmykey.ppk\
看起来用打印的十六进制而不是常规的ascii表示的值范围是0x20-0x2F,0x3A-0x3F或0x7B-0x7F。
有没有一种方法可以用sed,awk,python等来翻译它?
答案 0 :(得分:0)
从我所看到的,没有特殊字符到十六进制代码的转换。文件名和路径只是URL编码。
我已经创建了一个Perl脚本来处理它:
#!/usr/bin/env perl
use strict;
use warnings;
use URI::Escape;
my $regex = qr/(.*?)%3D(.*)$/p;
my $file = "/some/where/conf.file";
open my $input, '<', $file or die "can't open $file: $!";
while (<$input>) {
chomp;
my $result = uri_escape( $_ ) =~ s/$regex/$1\\$2\\/rg;
print $result . "\n";
}
close $input or die "can't close $file: $!";
输入:
PublicKeyFile=C:\Users\user.name\mykey.ppk
LogFileName=putty.log
LogType=0
输出:
PublicKeyFile\C%3A%5CUsers%5Cuser.name%5Cmykey.ppk\
LogFileName\putty.log\
LogType\0\