与sed的猫命令

时间:2018-01-27 18:00:40

标签: json awk sed cat

我有一个文件:

     loggedIn(){
return tokenNotExpired();

我想提取{ "test_data": [ { "id": "1", "pm": "30", "mp": "40" } ], "test": [ "id", "pm", "mp" ] } 。输出:

test_data

我尝试这个命令:"test_data": [ { "id": "1", "pm": "30", "mp": "40" } ],

但它不起作用。一个想法?

谢谢!

4 个答案:

答案 0 :(得分:2)

jq似乎是正确的工具:

$ jq '.|{test_data:.test_data}' filename
{
  "test_data": [
    {
      "id": "1",
      "pm": "30",
      "mp": "40"
    }
  ]
}

答案 1 :(得分:1)

解决方案第一: 使用sed

sed -n '/"test_data"/,/],/p'   Input_file
根据OP,

OR: ,OP需要在一行匹配后追加字符串/数据:

sed -n '/"test_data"/,/],/p;/],/s/$/"test"/p'  Input_file

OR2: 如果想要将其他文件的内容添加到匹配项中,则以下内容可能有所帮助:

sed -n '/"test_data"/,/],/p;/],/r another_file'  Input_file

解决方案第二: 以下简单awk可能对您有帮助。

awk '/test_data/, /],/' Input_file

输出如下。

  "test_data": [
    {
      "id": "1",
      "pm": "30",
      "mp": "40"
    }
  ],

以上解决方案的逻辑:

对于 sed-n中的sed选项将关闭任何行的打印,直到明确提及为打印它,然后执行/"test_data"/,/],/我让sed知道我需要从test_data获取数据直到,/]并在此之后提及p将确保这些行来自这个范围的是这里打印/

awk:只需提及/"test_data"/,/],/的范围,并且不提及任何操作,以便当任何行进入此范围条件时变为真并且由于没有提到任何动作,所以默认情况下会打印该行。

答案 2 :(得分:0)

您可以尝试使用gnu

csplit -s -z infile %test_data%-1 /],/1;rm xx01;echo "Add Text here" >> xx00;cat xx00

答案 3 :(得分:0)

正确的方法是 jq 工具:

jq 'del(.test)' inputfile

输出:

{
  "test_data": [
    {
      "id": "1",
      "pm": "30",
      "mp": "40"
    }
  ]
}