저는 쉘 스크립팅을 처음 접했습니다. 도움이 필요하다! !
다음과 같은 여러 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