在一个HTML文件中,让我们称之为index.html
,我想用一个名为gac.js的单独文件中的内容(多行)替换一个注释字符串,比如//gac goes here
。有一个很好的单行吗?
我发现了一些东西: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
perl -mFile::Slurp -pe 's///(w+) goes here/@{[File::Slurp::read_file("$1.js")]}/;'
显然需要File::Slurp
不是很好,但似乎可以工作:
cat index.html | perl -pe 'open(GAC, "gac.js");@gac=<GAC>;$data=join("", @gac); s/gac goes here/$data/g'
在经历了man sed
之后,本教程和我提出的一些实验:
sed -i '_//gac goes here_ {
r gac.js
d
}' index.html
这正是我想要的。这并不完全是一句我不理解的oneliner(如果我把它写成一行,我会得到:sed: -e expression #1, char 0: unmatched '{'
)。然而,上面的表达式非常适合我的更新脚本。
经验教训:sed非常强大,-i在macosx/linux上表现不同,/string/可以很容易地用\[other delimiter]string[other distmiter]代替。