2011-06-21 19 views
2

在一個HTML文件中,我們將其稱爲index.html,我想用內容(多行)替換註釋字符串,如//gac goes here,從一個單獨的文件中調用:gac.js.有沒有一個很好的單線?尋找一個Perl或sed單線程來替換另一個文件中的內容的字符串

我發現了一些東西:sed -e "/$str/r FileB" -e "/$str/d" FileA,但它沒有如承諾的那樣工作。

我喜歡它儘可能短,因爲它會在SVN恢復後調用(我不希望任何google.script污染我的開發環境)。

+0

是文件gac.js多行或單行的內容嗎? –

+0

gac.js是多行的(編輯) –

+0

這個sed命令適用於我。出了什麼問題? – Beta

回答

5

這應該工作,即使是討厭的:

perl -pe 'BEGIN{open F,"gac.js";@f=<F>}s#//gac goes here#@f#' index.html 

在這種gac.js應該是動態的情況:

perl -pe 's#//(\S+) goes here#open+F,"$1.js";join"",<F>#e' index.html 
+1

感謝這個討厭的單線! – Raj

1

不是很漂亮,但似乎工作:

cat index.html | perl -pe 'open(GAC, "gac.js");@gac=<GAC>;$data=join("", @gac); s/gac goes here/$data/g' 
+0

我認爲gac應該是動態的。 –

+1

無用的貓(http://partmaps.org/era/unix/award.html#cat)無法使用,並且每當您從'index.html'中讀取一行時,您正在讀'gac.js' –

+0

@Chas Owens ,你的版本更好:)。 +1這個 –

3
perl -mFile::Slurp -pe 's/\/\/(\w+) goes here/@{[File::Slurp::read_file("$1.js")]}/;' 

顯然需要文件:: Slurp的

1

通過man sedthis教程會和一些嘗試我想出了之後:

sed -i '\_//gac goes here_ { 
    r gac.js 
    d 
}' index.html 

這不正是我想要的東西。這不完全是一個oneliner(如果我讓它一行我得到:sed: -e expression #1, char 0: unmatched '{'),我不明白。不過上面的表達式很適合我的更新腳本。經驗教訓:sed非常強大,-i在mac os x/linux上的行爲不同,/ string /可以很容易地用\ [其他分隔符]字符串[other delimiter]替換。

+1

'{'不匹配的原因是sed將r從r到newline作爲文件名,所以右括號被解釋爲文件名的一部分。 –

+0

@William Pursell謝謝! –

相關問題