Sed不能使用特殊变量

时间:2018-01-28 10:04:49

标签: json file sed

我有一个添加到文件特定位置的命令。

a="hellotesting"
sed "/^[[:blank:]]*\"testing_$2\": \[$/,/^[[:blank:]]*],*$/ {s/^[[:blank:]]*}$/&`echo $a`/}" $1

这是工作!输出(是一个JSON文件,我不想使用jq)

{
  "mytable_test": [
    {
      "test1": "abc",
      "test2": "def",
      "test2": "ghi"
    }hellotesting
  ],
  "mytable": [
    "test1",
    "test2",
    "test3"
  ]
}

但我不能把文件的内容。 我的档案:

yeah
is
test
my
script

在我的计划中:

IFS=
a=$(cat file)
sed "/^[[:blank:]]*\"data_$2\": \[$/,/^[[:blank:]]*],*$/ {s/^[[:blank:]]*}$/&`echo $a`/}" $1

我有一个错误:

sed: -e expression #1, char 73: unterminated `s' command

我想要这个输出:

    {
      "mytable_test": [
        {
          "test1": "abc",
          "test2": "def",
          "test2": "ghi"
        }yeah
is
test
my
script
      ],
      "mytable": [
        "test1",
        "test2",
        "test3"
      ]
    }

但是,如果我的文件只是:

yeah

我的变量中的cat文件,工作.. 我不明白..

1 个答案:

答案 0 :(得分:0)

不完全确定为什么要破坏有效的json,但这就是你可以做的

$ var="yeah\nis\ntest\nmy\nscript"
$ echo "{                         
  "mytable_test": [
    {
      "test1": "abc",
      "test2": "def",
      "test2": "ghi"
    }hellotesting
  ],
  "mytable": [
    "test1",
    "test2",
    "test3"
  ]
}" | sed -E "s/hellotesting$/${var}/"

<强>输出

{
  mytable_test: [
    {
      test1: abc,
      test2: def,
      test2: ghi
    }yeah
is
test
my
script
  ],
  mytable: [
    test1,
    test2,
    test3
  ]
}