Создание умного шаблона с помощью GNU SED [dубликат]

У этого вопроса уже есть ответ: как я могу кодировать и декодировать строки с процентным кодированием в командной строке? 7 ответов

Это исходная строка:

%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 ]
-7
задан 26 November 2017 в 08:51

2 ответа

Это работает:

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 - лучший инструмент для использования здесь, но с тех пор, как вы хотите узнать.

4
ответ дан 18 July 2018 в 02:38

Это работает:

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 - лучший инструмент для использования здесь, но с тех пор, как вы хотите узнать.

4
ответ дан 24 July 2018 в 17:37
  • 1
    Спасибо, может быть что-то вроде этого? echo "% 2A + Hello & quot; | sed -e '/% /' \\ / g '-e' / "\\ / s / + /" /г' – GoldHaloWings 25 November 2017 в 08:35
  • 2
    Все еще работая над этим, когда это будет сделано, это обновление – George Udosen 25 November 2017 в 08:38
  • 3
    echo & quot;% 5B ++ + + + + 5B150mhz% 5D + + + + + 282017% 29 + Это + +% 2A + большой +% 2A + so + far ++% 5D & quot; | sed -re 's / \ + / / g' -e 's / \% / \\ x / g' -e 's / \ s + /' "/ g" отсутствует два " в "\ x5B150mhz \ x5D" и "\ x282017 \ x29" один " к концу – GoldHaloWings 25 November 2017 в 09:21
  • 4
    да это исправит! – George Udosen 25 November 2017 в 09:22
  • 5
    :) просто говорю – GoldHaloWings 25 November 2017 в 09:29

Другие вопросы по тегам:

Похожие вопросы: