在一個HTML文件中,我們將其稱爲index.html
,我想用內容(多行)替換註釋字符串,如//gac goes here
,從一個單獨的文件中調用:gac.js.有沒有一個很好的單線?尋找一個Perl或sed單線程來替換另一個文件中的內容的字符串
我發現了一些東西:sed -e "/$str/r FileB" -e "/$str/d" FileA
,但它沒有如承諾的那樣工作。
我喜歡它儘可能短,因爲它會在SVN恢復後調用(我不希望任何google.script污染我的開發環境)。
在一個HTML文件中,我們將其稱爲index.html
,我想用內容(多行)替換註釋字符串,如//gac goes here
,從一個單獨的文件中調用:gac.js.有沒有一個很好的單線?尋找一個Perl或sed單線程來替換另一個文件中的內容的字符串
我發現了一些東西:sed -e "/$str/r FileB" -e "/$str/d" FileA
,但它沒有如承諾的那樣工作。
我喜歡它儘可能短,因爲它會在SVN恢復後調用(我不希望任何google.script污染我的開發環境)。
這應該工作,即使是討厭的:
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
感謝這個討厭的單線! – Raj
不是很漂亮,但似乎工作:
cat index.html | perl -pe 'open(GAC, "gac.js");@gac=<GAC>;$data=join("", @gac); s/gac goes here/$data/g'
我認爲gac應該是動態的。 –
無用的貓(http://partmaps.org/era/unix/award.html#cat)無法使用,並且每當您從'index.html'中讀取一行時,您正在讀'gac.js' –
@Chas Owens ,你的版本更好:)。 +1這個 –
perl -mFile::Slurp -pe 's/\/\/(\w+) goes here/@{[File::Slurp::read_file("$1.js")]}/;'
顯然需要文件:: Slurp的
通過man sed
,this教程會和一些嘗試我想出了之後:
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]替換。
'{'不匹配的原因是sed將r從r到newline作爲文件名,所以右括號被解釋爲文件名的一部分。 –
@William Pursell謝謝! –
是文件gac.js多行或單行的內容嗎? –
gac.js是多行的(編輯) –
這個sed命令適用於我。出了什麼問題? – Beta