Это исходная строка:
%5B++The+transmission+is+%5B150mhz%5D+The+year+is+%282017%29+This+is+%2A+great+%2A+so+far++%5D
Можно ли создать шаблон только с GNU SED для: Заменить singe + на одно пространство Из %**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"
Затем on:
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 - лучший инструмент для использования здесь, но с тех пор, как вы хотите узнать.
Это работает:
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"
Затем on:
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 - лучший инструмент для использования здесь, но с тех пор, как вы хотите узнать.