2013-10-19 110 views
0

我有一个崇高的文本配置文件,并且当我在大学和家庭之间移动时,我想更改包控制的代理设置。该文件具有以下结构:查找和替换文件中的字符串与sed有效

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

现在,我需要3个值来代替http_proxy变量。它可以是代理AProxyB“”为没有代理。我希望能够使用sed高效地完成此操作。现在假设我想将代理设置为ProxyB。然后我会检查代理是空的还是设置为ProxyA然后执行查找和替换。所以,可以有三种情况:

  1. 当将代理服务器设置为“”,我们需要做的一个更换代理AProxyB
  2. 当代理将被设置到代理A,我们需要做一个取代对“”ProxyB
  3. 当将代理服务器设置为ProxyB,我们需要ŧ o不要一个替换为“”代理A

我可以用两个sed命令做到这一点。什么是实现这一目标的最有效方式?我认为这可以用一个sed命令来完成。

回答

2

所以,换句话说,它并不重要其中这三个值的存在。

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

将用ProxyA替换三个可能的值中的任何一个。 (当然,这意味着它也将与自身替换ProxyA,但这是,如果你想将它全部放入到一个单一的正则表达式,你需要做出妥协。)

+0

我希望我得到的命令行语法正确。我从未使用sed。 –

+0

嘿@Tim,你的解决方案似乎没有工作。 – Annihilator8080

+0

@ Annihilator8080:啊,我想我知道为什么。我忽略了原始字符串的':port'部分。那部分总是在那里,它总是这个确切的字符串'“:port”'?如果没有,那究竟是什么? –