2017-05-26 117 views
1

從貓結果中替換精確內容到文件中我想動態地更改名稱爲waf.py的文件上的某些值。通過終端

行是這樣

pp.pprint(api.post("/sites/<SITEID>/waf", {})) 

我已存儲的值到另一個文件名稱爲.adnid

我與命令處理

perl -pe 's/<SITEID>/`cat .adnid`/ge' -i waf.py 

它取代的內容,但它添加\n (輸入),剩下的內容進入新行,如

pp.pprint(api.post("/sites/626041 
/waf", {})) 

相反的除外(1行)

pp.pprint(api.post("/sites/626041/waf", {})) 

我怎樣才能使它不換行工作?

+0

'cat'附加換行符。 – simbabque

+0

有沒有其他的方法可以做到這一點,而不是貓? – tphil

回答

2

您可以使用cat,但您需要chomp關閉它附加的換行符。

perl -pe 'BEGIN { $id=`cat .adnid`; chomp $id } s/<SITEID>/$id/ge' -i waf.py 

這增加了一個只會執行一次的BEGIN塊。變量被讀取使用cat然後chomp編輯。替換應用於文件的每一行。這還有一個額外的好處,就是對於每一個輸入行,您都不需要支付cat

請注意,BEGIN-p的行爲不同。這在perlmod文檔中有大量例子。

Perlish的方式是使用open,實際上是從文件中讀取的,您也必須在BEGIN塊中進行讀取。但是對於一個丟棄腳本來說,它並不重要,並且方法更短。

+1

謝謝它作爲例外!非常感謝你的寶貴幫助。祝你一切順利 !! – tphil