linux - 仅使用 GNU sed 在第一个匹配项上插入时出现问题

标签 linux bash sed

4 在我的 linux 机器上(我检查了 w/sed --version)。

目前,我有一个包含以下内容的 myfile.txt:

---
title: hello
author: Jan King
foo: bar
author: Jan King
---

我知道在 GNU sed 中,如果我在 sed 命令前加上 0,,我可以在第一次出现匹配项后追加。

所以,如果我想在第一次出现 --- 之后插入 goodbye,我可以这样做:

 sed -i '0,/---/a goodbye' myfile.txt

预期/正确结果:

---
goodbye
title: hello
author: Jan King
foo: bar
author: Jan King
---

但是现在,我试图在第一次出现 author: Jan King 之后插入 goodbye

但是,下面的 sed 命令不起作用并附加 goodbye 3 次,这不是我想要的:

 sed -i '0,/^author:.*/a goodbye' myfile.txt

不正确/意外的结果:

---
goodbye
title: hello
goodbye
author: Jan King
goodbye
foo: bar
author: Jan King
---

如果我从上面的 sed 命令中删除 0,,那么 goodbye 会在 author: Jan King 之后附加两次:

 sed -i '/^author:.*/a goodbye' myfile.txt

预期结果:

---
title: hello
author: Jan King
goodbye
foo: bar
author: Jan King
goodbye
---

所以我在 author: Jan King 的第一场比赛中附加 goodbye 时遇到了麻烦(尽管在 的第一场比赛中没问题--- )。

有人可以解释为什么我的 sed 命令不起作用吗?以及如何解决?

最佳答案

您在评论中显示的链接与您尝试使用的命令序列不完全相同。如果您想使用相同的技术,请尝试:

sed -i '0,/^\(author:.*\)/s//\1\nNew Inserted Line/' myfile.txt

关于linux - 仅使用 GNU sed 在第一个匹配项上插入时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403369/

相关文章:

bash - 使用 bash 命令(带管道)的输出作为另一个命令的参数

bash - Bash 测试中的复合条件组

awk - 删除多行 - 从 "patternA"匹配,到第二次出现 "patternB"

regex - 在文本文件中加入具有特定模式的行

regex - 如何使用 sed 替换配置文件的变量?

linux - 如何用sed替换静态位置的字符串并且不删除空格

linux - MongoDB 在 Linux Mint 上升级失败,安装后脚本返回错误

linux - 我的 Linux 可执行程序中的段 00 是什么(64 位)

bash - 如何根据行开头的日期过滤 bash 命令的输出行?

c - 在头文件中定义变量导致多个变量定义