【问题标题】:Using sed to replace unique text with URL使用 sed 将唯一文本替换为 URL
【发布时间】:2021-09-17 09:54:52
【问题描述】:

我正在尝试找出一种更优雅的方法来用 URL 替换文件中的一段独特文本。

sed 似乎将 URL 解释为其评估逻辑的一部分,而不是仅仅替换 bash 变量中的文本。

我的文件看起来像:

$srcRemoveSoftwareURL = "softwareURL"

我正在尝试(区分大小写)用实际 URL 搜索/替换 softwareURL

我正在使用 bash 脚本来帮助进行操作,并且我正在设置我的变量,如下所示:

STORAGE_ENDPOINT_URL="http://mywebsite.com"

sas_url="se=2021-07-20T18%3A42Z&sp=rl&spr=https&sv=2018-11-09&sr=s&sig=oI/T9oHqzfEtuTjAotLyLN3IXbkiADGTPQllkyJlvEA%3D"

softwareURL="$STORAGE_ENDPOINT_URL/1-remove-software.sh?$sas_url"

# the resulting URL is like this:
# http://mywebsite.com/1-remove-software.sh?se=2021-07-20T18%3A42Z&sp=rl&spr=https&sv=2018-11-09&sr=s&sig=oI/T9oHqzfEtuTjAotLyLN3IXbkiADGTPQllkyJlvEA%3D

然后我使用 sed 替换文本:

sed "s|softwareURL|$softwareURL|" template_file.sh

我知道bash 优先考虑$softwareURL 变量并将其插入,但随后sed 将URL 解释为某些评估逻辑的一部分。

目前我生成的模板文件如下所示:

$srcRemoveSoftwareURL = "http://mywebsite.com/1-remove-software.sh?se=2021-07-20T18%3A42ZsoftwareURLsp=rlsoftwareURLspr=httpssoftwareURLsv=2018-11-09softwareURLsr=ssoftwareURLsig=oI/T9oHqzfEtuTjAotLyLN3IXbkiIIGTPQllkyJlvEA%3D

似乎sed 也在 URL 中找到任何与符号 & 字符并将其替换为文字 softwareURL

我现在正在做的是将结果再次通过管道传递给sed,并将softwareURL 替换为&,这似乎有点低效。

有没有更好的方法来做到这一点?

欢迎任何指导!

谢谢!

【问题讨论】:

    标签: url sed replace find


    【解决方案1】:

    当前结果的问题在于sed 中的& 指的是sed/s 命令第一部分中匹配的模式(在本例中为& == softwareURL)。

    一个想法是转义替换字符串中的所有&'s,例如:

    sed "s|softwareURL|$softwareURL|"          template_file.sh      # old
    sed "s|softwareURL|${softwareURL//&/\\&}|" template_file.sh      # new
    

    有了这个新的命令生成:

    $srcRemoveSoftwareURL = "http://mywebsite.com/1-remove-software.sh?se=2021-07-20T18%3A42Z&sp=rl&spr=https&sv=2018-11-09&sr=s&sig=oI/T9oHqzfEtuTjAotLyLN3IXbkiADGTPQllkyJlvEA%3D"
    

    如果您发现自己需要进行多次更换:

    $ somevariable="abc & % $ 123 & % $ xyz"
    $ somevariable="${somevariable//&/\\&}"     # escape literal '&'
    $ somevariable="${somevariable//%/\\%}"     # escape literal '%'
    $ somevariable="${somevariable//$/\\$}"     # escape literal '$'
    $ echo $somevariable
    abc \& \% \$ 123 \& \% \$ xyz
    

    注意:我并不是说您需要为sed 转义这些特定字符......只是指出如何在一个变量中进行多个替换。

    【讨论】:

    • 感谢您的详细解释!我非常感谢额外的帮助。这对我来说效果很好!
    猜你喜欢
    • 2014-11-27
    • 2010-10-25
    • 1970-01-01
    • 2011-11-25
    • 2017-03-19
    • 2012-01-22
    • 2016-05-07
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多