私はシェルスクリプトに初めて触れました。助けが必要です! !
次のような複数のURLを含むHTMLファイルがあります。https://test.abc.net/xxx/999994236/styles/css/the-guide-styles-Response.min.css
これらのすべてのURLで、既存のバージョン番号(太字)を置き換える新しいバージョン番号を渡すことができるシェルスクリプトを作成したいと思います。
これが私がこれまでにしたことです。 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.
変数を実際のURLに置き換えると${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