如何在macOS上使用gsed将文件内容替换为字符串?

时间:2017-05-11 21:09:48

标签: bash text sed replace macos-sierra

我需要一个文本文件,一个专门的index.html,并将另一个文本文件的内容插入该文本文件中的特定位置,但不是在该行的末尾。

我理解如何用字符串替换(替换)文本,如下所示:

gsed 's/WHAT_TO_SUBSTITUTE/WHAT_TO_SUBSTITUTE_WITH/' index.html > index-new.html

然而,当我尝试用文件的内容替换时,我遇到了问题。以下是我尝试过的内容:

gsed 's/<!--New Posts Go Below This Line-->/r newpost.txt/' index.html > index-new.html

以上内容根本不起作用。

gsed -s '/<!--New Posts Go Below This Line-->/ r newentry.txt' index.html > index-new.html

上面插入文件的内容,但是在行的末尾而不是替换字符串(如预期的那样)

文本文件的内容:

<!--New Posts Go Below This Line--> <div class=panel panel-default><div class=panel-heading><h4 class=panel-title><a data-parent=#accordion data-toggle=collapse href=#collapse56> February 31st, 2069 - New Post </a></h4></div><div class=panel-collapse collapse  id=collapse56><div class=panel-body><img alt=my_favorite_image.png div= src=/render/file.act?path=/my_favorite_image.png /></div></div></div>

预期输出(请记住,由于我公司的CMS,我使用的html是一次写入网络服务器的大块):

....index.html_HTML_code....<!--New Posts Go Below This Line-->CONTENTS_OF_newpost.txt.....index.html_HTML_code....

1 个答案:

答案 0 :(得分:2)

要使用<!--New Posts Go Below This Line-->中的内容替换newpost.html,您可以坚持使用简单的shell命令替换:

gsed "s/<!--New Posts Go Below This Line-->/$(cat newpost.txt)/" index.html > index-new.html

修改

只有newpost.txt不包含换行符时才会有效。用sed做多行的东西很难,因为语法非常模糊,难以阅读。

我强烈推荐另一种工具。例如Perl:

perl -pe 's/<!--New Posts Go Below This Line-->/`cat newpost.txt`/ge' index.html > index-new.html