Замените процентные символы в строке ( %20,% 5B,...) с помощью bash

У меня есть строки, содержащие процентные символы, такие как %20 и %5B, и я хотел бы преобразовать его в "обычные" символы, такие как \ для %20 и [ для %5B.

Как я могу это сделать?

Ответ 1

Встроенный printf в bash имеет специальный спецификатор формата (т.е.% b), который преобразует \x ** в соответствующее значение:

$ str='foo%20%5B12%5D'
$ printf "%b\n" "${str//%/\\x}"
foo [12]

Ответ 2

Наконец, благодаря каналу # bash IRC, я нашел решение "не так уж плохо":

echo `echo string%20with%5Bsome%23 | sed 's/%/\\\x/g'`