使用sed有效地查找和替换文件中的字符串

时间:2013-10-19 07:48:53

标签: regex replace sed

我有一个崇高的文本配置文件,我想在大学和家庭之间移动时更改包控制的代理设置。该文件具有以下结构:

{
    "installed_packages":
    [
        "AdvancedNewFile",
        "jQuery Snippets pack",
        "Nettuts+ Fetch",
        "Package Control",
        "Theme - Aqua",
        "Theme - Soda"
    ],
    "http_proxy": "ProxyA:port",
    "https_proxy": "ProxyA:port"
}

现在,我需要将http_proxy变量替换为3个值。对于没有代理,它可以是 ProxyA ProxyB "" 。我希望能够使用sed有效地做到这一点。现在假设我想将代理设置为 ProxyB 。然后我会检查代理是空的还是设置为 ProxyA ,然后进行查找和替换。因此可能有3种情况:

  1. 当代理设置为"" 时,我们需要替换 ProxyA ProxyB
  2. 当代理设置为 ProxyA 时,我们需要替换"" ProxyB
  3. 当代理设置为 ProxyB 时,我们需要替换"" ProxyA
  4. 我可以使用两个sed命令来完成此操作。实现这一目标的最有效方法是什么?我认为可以使用单个sed命令完成。

1 个答案:

答案 0 :(得分:2)

换句话说,这三个值中的并不重要。

sed -r 's/"http(s?)_proxy": "(Proxy[AB])?"/"http\1_proxy": "ProxyA"/' inputfile

将使用ProxyA替换三个可能值中的任何一个。 (当然这意味着它也将自己替换ProxyA,但如果你想将它们整合到一个正则表达式中,那就是你需要做出的妥协。)