Why not use sed?
You could do the following: sed -i '/\(# Please.*\|# with.*\|^#$\)/ d' $1
The -i flag will do the edits in-place, saving you having to create a temp file.
Assuming that the unwanted block always occurs at the same place, you could also do sed -i '/^# Please/,+2 d' $1 (Which will delete the line starting with "# Please" and the next 2 lines as well)
**Just noticed a typo in the second sed statement - There was a missing "/" (fixed now)
Edit: I just tried this on macOS and it errors out with sed: 1: ".git/COMMIT_EDITMSG": invalid command code .. With some searching, I learnt that BSD sed (the one that macOS uses) requires an extension with -i. However, even that gives me sed: 1: "/^# Please/,+2 d": expected context address. Apparently the +2 thing is GNU sed specific. The first statement (with -i.bak) didn't error, but didn't remove the lines either. I'm guessing it's because of inconsistencies in implementations of sed.
Does the other sed command work for you (sed -i.bak '/\(# Please.*\|# with.*\|^#$\)/ d' $1)?
You can also try this one: sed -i.bak '/^# Please/,/^#$/ d' $1
To keep things tidy you could make it sed -i.bak '/^# Please/,/^#$/ d' $1 && rm $1.bak
Why not use sed?
You could do the following:
sed -i '/\(# Please.*\|# with.*\|^#$\)/ d' $1
The
-i
flag will do the edits in-place, saving you having to create a temp file.Assuming that the unwanted block always occurs at the same place, you could also do
sed -i '/^# Please/,+2 d' $1
(Which will delete the line starting with "# Please" and the next 2 lines as well)**Just noticed a typo in the second
sed
statement - There was a missing "/" (fixed now)Great idea. I'll update the article to use this.
Edit: I just tried this on macOS and it errors out with
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
. With some searching, I learnt that BSDsed
(the one that macOS uses) requires an extension with-i
. However, even that gives mesed: 1: "/^# Please/,+2 d": expected context address
. Apparently the+2
thing is GNU sed specific. The first statement (with-i.bak
) didn't error, but didn't remove the lines either. I'm guessing it's because of inconsistencies in implementations ofsed
.Does the other
sed
command work for you (sed -i.bak '/\(# Please.*\|# with.*\|^#$\)/ d' $1
)?You can also try this one:
sed -i.bak '/^# Please/,/^#$/ d' $1
To keep things tidy you could make it
sed -i.bak '/^# Please/,/^#$/ d' $1 && rm $1.bak
Perfect.