sed 和 awk:如何将文件的一部分替换为另一内容?

发布于 2024-10-04 23:19:55 字数 158 浏览 3 评论 0原文

文件a.html:

<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

我想将中间文本替换为其他文本,如何使用sed/awk/其他工具实现?

File a.html:

<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

I want to replace the middle text to some other text, how to achieve that using sed/awk/other tools?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雾里花 2024-10-11 23:19:58
sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/'

输入

$ cat sedbanner
<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

输出

$ sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/' ./sedbanner
<!--TEMPLATE: banner-->
lalala
<!--TEMPLATE-END: banner-->

如果您喜欢输出,请将 sed -r 替换为 sed -ri 使其成为就地编辑

sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/'

Input

$ cat sedbanner
<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

Output

$ sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/' ./sedbanner
<!--TEMPLATE: banner-->
lalala
<!--TEMPLATE-END: banner-->

If you like the output then replace sed -r with sed -ri to make it an in-place edit

九命猫 2024-10-11 23:19:57

如果标记行之间的文本由一行或多行组成:

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/aSome text to insert' a.html

i 命令可以更改为 r 命令和文件名,以从文件中读取文本。

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/r filename' a.html

If the text between the marker lines consists of one or more lines:

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/aSome text to insert' a.html

The i command could be changed to an r command and a file name to read the text from a file.

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/r filename' a.html
旧时浪漫 2024-10-11 23:19:57

如果您在另一个文件中有新的横幅文本:

awk -v new_file=new_banner.txt '
    /!--TEMPLATE:/ {print; system("cat " new_file); banner=1; next}
    /!--TEMPLATE-END:/ {banner=0}
    banner {next}
    {print}
' a.html

If you have the new banner text in another file:

awk -v new_file=new_banner.txt '
    /!--TEMPLATE:/ {print; system("cat " new_file); banner=1; next}
    /!--TEMPLATE-END:/ {banner=0}
    banner {next}
    {print}
' a.html
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文