更改

2013-02-07 16 views
0

我運行的進程文件的目標線,它採用了一組在一個文件中定義的參數parameters.py更改

現在,我想橫掃的一個值參數超過一定範圍。因此,我寫了一個批處理文件來自動化該過程。

問題

我的問題是,我需要修改文件參數的20日線,從value = 200value = $VAR,其中$VAR設置參數的新值。

問題

有一個bash命令,允許更改文件的具體目標線?

謝謝你,歡呼聲。

+1

我不明白你的意思是* swept *。 – kojiro

+1

聽起來你正在尋找[tag:sed],它允許你在一個流(或文件)中對一行進行編址並對其進行編輯,但是我不清楚爲什麼你在Bash中這樣做而不是提供一個您的Python腳本的參數。 – Johnsyweb

+1

由於@Johnsyweb暗示或許你應該說明你想要實現的目標,就像用sed或類似的方式修改Python腳本似乎是錯誤的,你應該傳遞一個CLI參數或者改變它以便得到它來自環境的價值。什麼過程使用這個''parameters.py''另一個Python腳本或shell。? – sotapme

回答

2

嘗試這樣做:

sed -i "20s/value = 200/value = $VAR/" file.txt 

這將改變value = 200value = $VAR第20行s///sed替代的骨架:s/before/after/

-i開關編輯到位

文件
+0

這應該是'20s /'...而不是'4s/...'。 (該號碼是應用搜索命令的行) –

+0

@sputnick Thx用於快速響應。你可以給我解釋一下,'4'在搜索中做了什麼?因爲我的文件有多行,模式爲'value = 200' ...我只需要更改第20行。 – Dox

+0

謝謝@AaronDigulla!非常有用 – Dox

2

儘管這當然有可能,但我不會推薦它。有一天,有人會在此行或空行之前添加註釋,並且腳本會中斷。

使用sed代替:

sed -e 's/value = 200/value = $VAR/' < parameters.py 

一個更好的解決辦法是在parameters.py一切進入parameterdefaults.py像這樣:

parameterdefaults.py:

options = { 
    "value": 200, 
} 

parameters.py:

import parameterdefaults 

options = dict(**parameterdefaults.options) # copy defaults 

options['value'] = 10 # Override the few values you need to change 

甚至更​​好:

codethatneedsparameters.py:

import parameterdefaults 
import parameters 

options = dict(**parameterdefaults.options) # copy defaults 
options.update(parameters.options) # merge with changes 

現在你可以這樣寫:

參數。潘岳:

options = { 
    "value": 10, 
} 
+0

注意,這個解決方案替換所有出現的'value = 200',不僅是第20行 –

1

最簡單的方法(但不是最好的)做的,而不是黑客的腳本,這是它從

value = 200 

改變

import os # somewhere at the top if need be. 
value = int(os.environ.get('VAR', 200)) 

這樣它可以在調用過程中進行修改。