【问题标题】:Replace Random Characters in a Variable替换变量中的随机字符
【发布时间】:2019-04-11 03:59:33
【问题描述】:

我想替换一个变量的值(可以包含一个数字、一个字符、一个字符串)。

$ 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"

我知道有些问题可以回答类似的问题,但它们没有帮助。

【问题讨论】:

  • 在问题中使用 some-random-stringmystring 等术语的问题在于,据我们所知,它们绝对可以包含任何字符,这使得编写正则表达式或处理替换文本的方法具有挑战性.您能否更具体地说明它可以/不能包含的内容,并在您的问题中展示一些真正具有代表性的示例?确保包括预期的输出以及示例输入。
  • 你是对的。谢谢。
  • 不客气。如果不明显,鉴于mystring 中的各种字符,您选择的答案将失败,例如&|\1 或 ...

标签: regex linux variables sed


【解决方案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
|

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您不需要 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

      因为这种方法不需要管道或子shell,所以效率更高。

      【讨论】:

        【解决方案4】:

        gnu sed

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

        【讨论】:

          猜你喜欢
          • 2017-05-20
          • 1970-01-01
          • 1970-01-01
          • 2018-05-21
          • 1970-01-01
          • 2021-05-29
          • 2020-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多