替换变量中的随机字符

时间:2019-04-11 03:59:34

标签: regex linux variables sed

我要替换变量的值(可以包含数字,字符,字符串)。

$ 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 个答案:

答案 0 :(得分:1)

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
|

答案 1 :(得分:0)

在sed中,您必须在匹配之前转义任何控制字符,例如正斜杠:

echo $VAR | sed 's/http.\/\/.*\.watch\.film\.tv/http:\/\/mystring.watch.film.tv/'

答案 2 :(得分:0)

您不需要sed。此任务可以在shell中完成:

$ 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的第一个匹配项为止的所有内容。

由于这种方法不需要管道或子外壳,因此效率更高。

答案 3 :(得分:0)

gnu sed

$ echo $VAR | sed -E 's/^(http:\/\/)\S+(\.watch\.film\.tv\/)/\1"mystring"\2/i'