4 on my linux machine (I checked w/ sed --version
).
Currently, I have a myfile.txt
with the following content:
---
title: hello
author: Jan King
foo: bar
author: Jan King
---
I know in GNU sed, I can append after the first occurrence of a match if I prepend the sed command with 0,
.
So, if I want to insert goodbye
after the first occurrence of ---
, I can do that:
sed -i '0,/---/a goodbye' myfile.txt
expected/correct result:
---
goodbye
title: hello
author: Jan King
foo: bar
author: Jan King
---
But now, I am trying to insert goodbye
after the first occurrence of author: Jan King
.
However, the following sed
command doesn’t work and appends goodbye
3 times, which is not what I want:
sed -i '0,/^author:.*/a goodbye' myfile.txt
incorrect/unexpected result:
---
goodbye
title: hello
goodbye
author: Jan King
goodbye
foo: bar
author: Jan King
---
If I remove 0,
from the above sed command, then goodbye
is appended twice after author: Jan King
:
sed -i '/^author:.*/a goodbye' myfile.txt
expected result:
---
title: hello
author: Jan King
goodbye
foo: bar
author: Jan King
goodbye
---
So I’m having trouble appending goodbye
on first match only of author: Jan King
(even though it is fine on first match of ---
).
Can someone please explain why my sed
command isn’t working? And how to fix it?
Advertisement
Answer
The link you show in the comment is not quite the same command sequence that you’re trying to use. If you want to use the same technique, try:
sed -i '0,/^(author:.*)/s//1nNew Inserted Line/' myfile.txt