Заменить случайные символы в переменной - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу заменить значение переменной (может содержать число, символ, строку символов).

$ echo $VAR
http://some-random-string.watch.film.tv/nfvsere/watch/skrz1j8exe/chunks.m3u8?nimblesessionid=30931574352........

Пока что я пробовал эту команду, однако она не работает, поэтому я думаю, что некоторые из них могут нуждаться в регулярном выражении.

$ echo $VAR | sed -e "s/\(http[^^]*\).*\(.watch\)/\1"mystring"\2/g"
$ echo $VAR | sed -e "s/\(https\?:\/\/\).*\(.watch\)/\1"mystring"\2/g"
$ echo $VAR | sed -e "s/\(http[s]\?:\/\/\).*\(.watch\)/\1"mystring"\2/g"

Мне известно, что есть вопросы, которые отвечают на аналогичные вопросы, но они не помогли.

Ответы [ 4 ]

1 голос
/ 11 апреля 2019
echo $VAR | sed 's|\(http[x]*://\)[^.]*\(.*\)|\1mystring\2|'

Объяснение

s|                 # substitute
\(http[x]*://\)    # save first part in arg1 (\1)
[^.]*              # all without '.'
\(.*\)             # save the rest in arg2 (\2)
|\1                # print arg1
mystring           # print your replacement
\2                 # print arg2
|
0 голосов
/ 11 апреля 2019

GNU SED

$ echo $VAR | sed -E 's/^(http:\/\/)\S+(\.watch\.film\.tv\/)/\1"mystring"\2/i'
0 голосов
/ 11 апреля 2019

Вам не нужен сед. Эту задачу можно выполнить только в оболочке:

$ var='http://some-random-string.watch.film.tv/nfvsere/watch/skrz1j8exe/chunks.m3u8?nimblesessionid=30931574352'
$ echo "${var%%//*}//mystring.watch${var#*.watch}"
http://mystring.watch.film.tv/nfvsere/watch/skrz1j8exe/chunks.m3u8?nimblesessionid=30931574352

Как это работает:

  1. ${var%%//*} возвращает значение $var с первым // и всем, что после него удалено.

  2. //mystring.watch добавляет желаемую строку.

  3. ${var#*.watch}" возвращает значение $var со всем, вплоть до первого вхождения .watch включительно.

Поскольку этот подход не требует конвейеров или подоболочек, он будет более эффективным.

0 голосов
/ 11 апреля 2019

В sed вы должны экранировать любые управляющие символы, такие как косая черта, перед соответствием:

echo $VAR | sed 's/http.\/\/.*\.watch\.film\.tv/http:\/\/mystring.watch.film.tv/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...