在Linux上使用regex替换文件中的多行文本

时间:2015-05-15 13:04:12

标签: python regex perl sed

我需要替换配置文件中的多行文字。 我可以使用sed(BusyBox v1.21.1),perl(版本5版本14颠覆2)或python(2.7)。

该文件可以有两种格式: A)

     "is_managed": false,
      "local_profile_id": 15191724,
      "name": "First user"
    },
    **"session": {
      "restore_on_startup": 4,
      "restore_on_startup_migrated": true,
      "urls_to_restore_on_startup": [ "http://alamakota/" ]
    }**
}

或 B)

      "is_managed": false,
      "local_profile_id": 15191724,
      "name": "First user"
   },
   **"session": {
      "restore_on_startup_migrated": true,
   }**
}

我想将其更改为:

     "is_managed": false,
      "local_profile_id": 15191724,
      "name": "First user"
   },
   "session": {
      "restore_on_startup": 4,
      "restore_on_startup_migrated": true,
      "urls_to_restore_on_startup": [ "http://192.168.0.100" ]
   }
}

2 个答案:

答案 0 :(得分:1)

可能是你想先将它解析为json并在需要时编码回json

use JSON::XS;

my $rh_data = decode_json($json_string);

#then updated values by accesing $rh_data->{xx}{yy} = 'new value';

#and encode back to json
$json_data  = encode_json($rh_data); 

答案 1 :(得分:0)

show

尝试运行它     while(my $ln = <STDIN>){ if ($ln =~ /^([ ]*)(\*\*)(.*)/) { print "$1"."$3"; } elsif ($ln =~ /(.*)?(\*\*)([ ]*)$/) { print "$1"."$3"; } else { print $ln; } }