I'm much more familiar with sed than ed, so here's how I would to this:
sed '/baz/{s/.*/&\n&/;s/baz/elephant/2}' input.txt
or, slightly more readable
sed '/baz/ {
s/.*/&\n&/
s/baz/elephant/2
}' input.txt
The first substitution appends a copy of the line to the pattern space, the second substitution replaces the second occurrence of "baz" with "elephant".
This being said, I went ahead and bought the book mentioned in the article [0] - a neat little read.
To use this solution with a version of sed that does not accept newlines in patterns (i.e. to make it portable), one has to put the commands in a sed commands file and run it with sed -f.
How to make the one-liner portable without using a sed commands file?
Maybe something like:
sed 's/baz/elephant/;/^ \{2\}- elephant/{h;G;};/^ \{4\}- elephant/{h;G;};s/elephant/baz/' foo|sed -a wfoo
1. s/baz/elephant/
2. duplicate that line if two or four space indent
3. s/elephant/baz/
4. save
N.B. no temp file used to save changes
cf. jvns.ca blog:
1. search for baz
2. copy that line and paste it
3. s/baz/elephant/
4. save and quit
This being said, I went ahead and bought the book mentioned in the article [0] - a neat little read.
[0]: https://www.michaelwlucas.com/tools/ed