Экранирование UTF -8 закодированных URL-адресов

Чтобы сопоставить строки, начинающиеся с DL1 :, и добавить ,ghj@kk.comв конец($)из них:

$ sed '/^DL1 :/ s/$/,ghj@kk.com/' file
DL1 : abc@kk.com,cde@kk.com,xyz@kk.com,ghj@kk.com
DL2 : hjk@kk.com,nbv@kk.com,tuy@kk.com

В зависимости от ваших требований и версии sedвы можете добавить -i, чтобы выполнить преобразование в месте -.

0
30.03.2021, 18:27
1 ответ

Один из способов — привязать функцию в bash, которая при задании строки, которая будет сделана подключаемой в левой или правой части команды sed s///, выглядит следующим образом:

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
0
28.04.2021, 22:54

Теги

Похожие вопросы