JS-string decode by Bash

Столкнулся я тут с необходимостью раскодировать строку в том формате, который используется в JSON, т.е. когда символы, кроме латиницы и ещё некоторых знаков кодируются как \uXXXX.

Можно было, конечно, вызвать какой-нибудь нормальный интерпретатор, благо на «Маке» их хватает («из коробки» есть ПХП, Перл, Пайтон, Руби, ещё что-то там), но неспортивно как-то.

Сделал на «Баше» и утилитах командной строки (кстати, легко переделать, при желании, и на «sh»):
:|sed -E '' 2>&- && SED='sed -E' || SED='sed -r'

uNNNNhelper() {
    printf $(echo -n "$@") | iconv -f utf-16be
}

uNNNN() {
    eval $(
        echo -n "$@" |
        $SED '
            s/([^[:alnum:]])/\\\1/g
            s/^/echo /
            s/((\\\\[Uu]....)+)/$(uNNNNhelper \1)/g
            s/\\\\[Uu](..)(..)/\\\\x\1\\\\x\2/g
        '
    )
}

uNNNN 'Hello, \U043C\U0438\U0440!' # выведет «Hello, мир!»
7 февраля 2013 21:19

Читатель (инкогнито)
8 февраля 2013, 12:52

Да, не всякий код нуждается в обфускации :)

bolk (bolknote.ru)
8 февраля 2013, 13:31, ответ предназначен Читателю

Это очень простой код :) Тут просто регулярные выражения (правда простые очень), если их знать, читается запросто. У меня есть образец действительно головоломного bash-кода, не моего авторства, как-нибудь покажу.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)