UTF-8로 인코딩된 URL 이스케이프

UTF-8로 인코딩된 URL 이스케이프

하나 바꾸고 싶어요변수 확장URL--- 파일 내에서 직접.
변수 확장을 대체하려는 URL은 페이지 이름의 언어가 오른쪽에서 왼쪽(RTL)[히브리어]이기 때문에 UTF-8로 인코딩됩니다.


이것은 내가 사용하는 대체 패턴입니다(현재는 이스케이프하지 않음).

sed -i 's/$contact_form_success_webpage/https://example.com/index.php?title=%D7%99%D7%A6%D7%99%D7%A8%D7%AA_%D7%A7%D7%A9%D7%A8:%D7%94%D7%A6%D7%9C%D7%97%D7%94/g' FILE

$이를 위해 자동화를 수행 of 앞에$contact_form_success_webpage있도록\$contact_form_success_webpage하여 처리할 수sed

위의 URL 패턴은 상당히 "간단"하거나 "단순"하지만 일부 URL에는 슬래시( )가 많이 있을 수 있고 /이스케이프해야 할 다른 부분이 많이 있을 수도 있습니다.


UTF-8로 인코딩된 URL을 이스케이프하는 것을 어떻게 권장합니까?
(일반적으로 모든 사용 사례에 어떤 패턴을 사용하시겠습니까?)

답변1

이를 수행하는 한 가지 방법은 sed 명령 s///의 LHS 또는 RHS에 삽입할 수 있는 문자열이 주어지면 bash에서 다음과 같이 함수를 바인딩하는 것입니다.

esc_sedvar() {
  case $1 in
    '--lhs')
      a=( '\'  "[" "^" '$' "." "*" / ) ;;
    '--rhs'|*)
      a=( '\' '&' / )
  esac

  local var=$2
  for c in "${a[@]}"; do
    var=${var//"$c"/\\"$c"}
  done
  printf '%s\n' "$var"
}

### don't escape anything in this, for you they are plain strings.
srch='$contact_form_success_webpage/https://example.com'

repl='index.php?title=%D7%99%D7%A6%D7%99%D7%A8%D7%AA_%D7%A7%D7%A9%D7%A8:%D7%94%D7%A6%D7%9C%D7%97%D7%94'

sed -i -e \
's/'\
"$(esc_sedvar --lhs "$srch")"\
'/'\
"$(esc_sedvar --rhs "$repl")"\
'/g'\
   FILE

관련 정보