Заменить только определенные символы в текстовых файлах в печатном шестнадцатеричном формате - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь перевести мои старые файлы конфигурации PortaPuTTY в формат файла конфигурации KiTTY.

PortaPutty использует формат 'Field = Value', а KiTTY использует формат 'Field \ Value \'.

Я могу перевести из PortaPuTTY в формат KiTTY с помощью:

sed -i -e 's / = / \ / g' -e 's /.$/\/'

so

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 и т. Д.?

1 Ответ

0 голосов
/ 19 мая 2018

Из того, что я вижу, нет перевода специальных символов в шестнадцатеричные коды.Имена файлов и пути просто кодируются 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\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...