Sed 替换 & 和斜线

Sed to Replace & and slashes

我有以下格式的数据。

  new_name='abc &eft /  def \ mno' 

 1.json
  {
    "text": {
              "attribute": "old_name",
              "data": "xyz"
             }
  }

我正在尝试将值 old_name 替换为 new_name。

我的足迹:--

 sed  "s/old_name/${new_name/&/\&}; s/old_name/${new_name////\/}/g" 1.json

我遇到以下错误:--

 sed: -e expression #1, char 67: unknown option to `s'

任何指导都会有很大帮助。

您可以通过使用不同的分隔符进行替换来跳过对斜线进行转义的需要,但是您仍然需要在 sed 命令之外执行其他替换之一:

new_name='abc &eft /  def \ mno'
quoted=${new_name/\/\\\\}
sed "s=old_name=${quoted//&/\&}=g" 1.json

但是 jq 是更好的工具来处理 json:

new_name='abc &eft /  def \ mno'
jq --arg n "$new_name" \
    '.text.attribute |= (if . == "old_name" then $n else . end)' 1.json