正在寻找一个Perl或sed one-liner来用另一个文件中的内容替换字符串



在一个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]代替。

相关内容

  • 没有找到相关文章

最新更新