使用 sed 将唯一文本替换为 URL
Using sed to replace unique text with URL
我想找出一种更优雅的方法来用 URL.
替换文件中的一段独特文本
似乎 sed
将 URL 解释为其评估逻辑的一部分,而不是仅仅替换 bash 变量中的文本。
我的文件看起来像:
$srcRemoveSoftwareURL = "softwareURL"
我正在尝试(区分大小写)search/replace softwareURL
与实际的 URL.
我正在使用 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
替换为 &
这似乎有点低效。
有更好的方法吗?
欢迎任何指导!
谢谢!
当前结果的问题是,在 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
转义这些特定字符 ... 只是指出如何在一个文件中进行多个替换变量。
我想找出一种更优雅的方法来用 URL.
替换文件中的一段独特文本似乎 sed
将 URL 解释为其评估逻辑的一部分,而不是仅仅替换 bash 变量中的文本。
我的文件看起来像:
$srcRemoveSoftwareURL = "softwareURL"
我正在尝试(区分大小写)search/replace softwareURL
与实际的 URL.
我正在使用 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
替换为 &
这似乎有点低效。
有更好的方法吗?
欢迎任何指导!
谢谢!
当前结果的问题是,在 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
转义这些特定字符 ... 只是指出如何在一个文件中进行多个替换变量。