我是 shell 脚本编写的新手。需要帮忙!!
我有一个带有多个网址的 html 文件,例如https://test.abc.net/xxx/999994236/styles/css/the-guide-styles-responsive.min.css
我想创建一个 shell 脚本,在其中可以传递一个新版本号,该版本号将替换所有此类 url 中的现有版本号(以粗体显示)。
这就是我到目前为止所做的,只获取一个网址;
#!/bin/bash
version=$1 ##Taking version as a parameter
my_str="https://test.abc.net/xxx/**999994236**/styles/css/the-guide-styles-responsive.min.css"
IFS='/' #setting slash as delimiter
read -a strarr <<<"$my_str" #reading str as an array as tokens separated by IFS
echo "Version : ${strarr[4]} "
strarr[4]=$1
echo "Version : ${strarr[4]} "
SAVE_IFS="$IFS"
IFS="/"
my_str_join="${my_str[*]}"
IFS="$SAVE_IFS"
echo "$my_str_join"
my_str_new="https://test.abc.net/xxx/**${strarr[4]}**/styles/css/the-guide-styles-responsive.min.css"
SAVE_IFS="$IFS"
IFS="/"
my_str_new_join="${my_str_new[*]}"
IFS="$SAVE_IFS"
echo "$my_str_new_join"
sed -i 's~${my_str_join}~${my_str_new_join}~g' index1.html ##This is where I am stuck.
如果我用实际的网址代替变量${my_str_join}&${my_str_new_join},这一步工作正常,但对于变量则不然。
我已经尝试了所有方法,但无法再集思广益了。我应该如何继续这个?请帮忙!
答案1
sed 命令
sed -i 's~${my_str_join}~${my_str_new_join}~g' index1.html
使用单引号,这可以防止替换。在您想要替换的地方使用双引号,例如,
sed -i 's~${my_str_join}~'"${my_str_new_join}"'~g' index1.html