【发布时间】:2019-08-10 23:17:39
【问题描述】:
4 在我的 linux 机器上(我检查了 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 命令不起作用?以及如何解决?
【问题讨论】:
-
我知道在 GNU sed 中,如果我在 sed 命令前面加上
0,,我可以在第一次出现匹配后追加你能说明你从哪里学到的吗?它显然不是这样的。再次尝试您的第一个示例,但将---的第一次出现放在第三行而不是第一行。您将获得与第二个示例类似的结果。您正在使用的0,/...将附加在 每一行 上,直到匹配的行。 -
查看这篇文章:What is the meaning of “0,/xxx” in sed?。它表示
0,/^ENABLE_DEBUG.*/表示替换只会发生在从头开始的行。您显示的链接与您使用的命令序列不完全相同。