На этот вопрос уже есть ответ:
Это исходная строка:
%5B++The+transmission+is+%5B150mhz%5D+The+year+is+%282017%29+This+is+%2A+great+%2A+so+far++%5D
% ** abc
до «\ x **» abc
(первые два символа после% всегда шестнадцатеричные UTF-8) Таким образом, результат будет примерно таким:
"\x5B" "The" "transmission" "is" "\x5B"150mhz"\x5D" "The" "year" "is" "\x28"2017"\x29" "This" "is" "\x2A" "great" "\x2A" "so" "far" "\x5D"
Итак, когда эхо используется со строкой:
echo -e "\x5B" "The" "transmission" "is" "\x5B"150mhz"\x5D" "The" "year" "is" "\x28"2017"\x29" "This" "is" "\x2A" "great" "\x2A" "so" "far" "\x5D"
Результат будет точно вот так:
[ The transmission is [150mhz] The year is (2017) This is * great * so far ]
Это работает:
sed -r -e 's/(.*)/"\1"/' -e 's/\+/" "/g' -e 's/""/ /g' -e 's/\%/\\x/g' -e 's/("\\x.{2})/\1"/g' -e 's/""\s+/" /g' -e 's/"(.*)"/"\1/' -e 's/([^"]|(([0-9]|[a-z])))(\\x[0-9]([a-zA-Z]|[0-9]))" /\1"\4" /g' src.txt
Результат:
"\x5B" "The" "transmission" "is" "\x5B"150mhz"\x5D" "The" "year" "is" "\x28"2017"\x29" "This" "is" "\x2A" "great" "\x2A" "so" "far" "\x5D"
Затем на:
echo -e "\x5B" "The" "transmission" "is" "\x5B"150mhz"\x5D" "The" "year" "is" "\x28"2017"\x29" "This" "is" "\x2A" "great" "\x2A" "so" "far" "\x5D"
Результат:
[ The transmission is [150mhz] The year is (2017) This is * great * so far ]
Я не думаю sed
лучший инструмент должен использовать здесь, но начиная с того, что вы смотрели учатся.