On 09.11.2011 15:00, Lystopad Olexandr wrote:
Hello, Maxim Ignatenko!

On Wed, Nov 09, 2011 at 02:51:32PM +0200
[email protected] wrote about "Re: [freebsd] Раскодировать файл: как?":
On 09.11.2011 14:21, Lystopad Olexandr wrote:
>Здравствуйте!
>
>Дурацкий вопрос ;)
>
>Подскажите, пожалуйста, как привести в человеческий вид файл, внутри
>которого такое:
>
>\x00\x11\x22 \x00\x00\x5f-e
>
>и тп.
>
>Заранее спасибо.

Да хоть шеллом построчно:
% cat test.txt
\x00\x11\x22 \x00\x00\x5f-e
% sed -e 's,\\,\\\\,g' test.txt | while read line; do echo "${line}";
done
" _-e

Спасибо, но это не помогло. :(

file говорит:

        ASCII text, with very long lines, with no line terminators


Тогда как-то так:

% awk -f decode.awk test.txt | head
" _-e
% cat decode.awk
#!/usr/bin/awk -f

function hex2dec(c)
{
        return index("0123456789abcdef", c) - 1
}

{
        while (match($0, "\\\\x[0-9a-f][0-9a-f]"))
        {
                c1 = substr($0, RSTART+2, 1)
                c2 = substr($0, RSTART+3, 1)
                r = sprintf("%c", hex2dec(c1)*16+hex2dec(c2))
                gsub("\\\\x" c1 c2, r)
        }
        print $0
}

Можно то же самое на перле в одну строчку сделать, если есть желание.

Ответить