I'm doing my commit messages in Git with a certain pattern to ease creation of a changelog for new releases (https://stackoverflow.com/a/5151123/520162).
Every change that should be taken into my changelog gets prefixed with CHG, NEW or FIX.
When it comes to generation of my changelog, I print out the revisions I'm going to parse using the following command for each revision:
git show --quiet --date=short --pretty=format:"%cd %an %s%n%n%w(100,21,21)%b%n" $CURRENTREVISION
The subject (%s) holds the subject of the modification.
Next, I'm using SED to modify the generated outputs so that they fit the needs of my changelog file.
Now, it happens that in the subject line, there are multiple occurrences of CHG, NEW or FIX. My output of the subject looks like this:
DATE NAME FIX first change NEW second change CHG third change
I'd like to prefix all but the first occurrence of my keywords with a newline so that each CHG, NEW or FIX starts a new line:
DATE NAME FIX first change
NEW second change
CHG third change
What do I have to tell SED in order to achieve this?
sedisn't the most appropriate tool for thisWith
awkit would look like this.n=0(re)set a flagfor (i=1; i<=NF; i++)loop over every field of the lineif ($i ~ /(NEW|FIX|CHG)/)if the field is one of the markers$i=(n++?"\n ":"")$iupdate the field by adding the appropriate leading space (or none)7truth-y pattern to print out the current line.