我要替换变量的值(可以包含数字,字符,字符串)。
$ 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"
我知道有些问题可以回答类似的问题,但是并没有帮助。
答案 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
工作原理:
${var%%//*}
返回$var
的值和第一个//
以及删除后的所有内容。
//mystring.watch
添加我们想要的字符串。
${var#*.watch}"
返回$var
的值,并删除直到.watch
的第一个匹配项为止的所有内容。
由于这种方法不需要管道或子外壳,因此效率更高。
答案 3 :(得分:0)
gnu sed
$ echo $VAR | sed -E 's/^(http:\/\/)\S+(\.watch\.film\.tv\/)/\1"mystring"\2/i'