2013-10-19 155 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」'?如果沒有,那究竟是什麼? –