2013-07-19 53 views
2

我相信肯定有更聰明的方法來實現這一點。我需要改變我的JavaScript之前使用Closure縮小它的應用程序ID。如何在Python中使用sed?

我想出了一個「快速」解決方案,就是使用良好的舊sed。雖然這在命令行上工作,但在python文件中運行時會失敗。它不會因錯誤而失敗。 outfile文件是源的精確副本。就好像它沒有找到文本。

choice = raw_input("Type 1 (Staging) or 2 (Production)?") 
    if choice == '1': 
     cmd = r"sed 's%var appid = '1234';%var appid = '5678';%' {0}f11.js > {0}f11_final.js".format(PATH) 
     os.system(cmd) 

任何想法我失蹤了?由於

UPDATE:

我只是改變從這個來源:

var appid = '1'; 

這樣:

var appid = 1; 

就跑這個成功:

cmd = "sed -i 's%var appid = 1;%var appid = 2;%' {0}f11.js".format(PATH) 

它與轉義單引號有關。任何想法我可以做什麼?我試過\'但它失敗了。

解決方案:

我結束了在蟒蛇做的建議。如果你以前沒有做過,那很不容易。所以我分享我的代碼:

with open("{0}f11.js".format(PATH), "r") as sources: 
    lines = sources.readlines() 
with open("{0}f11-final.js".format(PATH), "w") as sources: 
    for line in lines: 
     sources.write(re.sub("var appid = '1';", "var appid = '2';", line)) 
+0

正則表達式中的'''不應該被轉義? – Bakuriu

+0

你確定嗎?這適用於我 - os.system(r「echo'var appid = 1234;'| sed's%var appid ='1234';%var appid ='5678';%'」) – user1827356

+0

它拋出'sh:1 :Syntax error:Unterminated quoted string' if if it escape it like like:'cmd = r「sed's%var appid = \'1234';%var appid ='5678';%'...' – Houman

回答

2

您可以使用Python的庫re。特別是與sed類似的功能sub。