Shell Scripting02 Mar 2012 | Comments
I’m inspired. I have watched a couple of Gary Bernhardt screencasts
on Destroy All Software - particularly on Unix scripting and I guess I am
a inspired and quite happy that I already can put into practice what I learned.
Had to investigate a production issue couple of days ago. I tailed the log file and saw a lot of noise from New Relic agent - which I am not really interested in. So I need to remove these New Relic agent lines so that I concentrate on finding the real errors.
Sed to the rescue:
sed 's/New\ Relic\ Agent\ not\ running\.//g' importing.log| sed '/^$/d' > importing_cleaned.log
The first sed command, replaces the string “New Relic Agent not running” with empty string. This unfortunatelly leaves the newlines behind. The second sed command takes care of that, /d at the end is for delete, the pattern that we want to delete is ^$. What’s ^$? Regex speak, ^ is the beginning of the line and $ is the end of the line. So ^$ with nothing between them represent an empty line.
There’s a better way to achieve what I did above for sure, I am just happy that I can get to learn a little bit about sed.
Naughty me, making changes to the code without creating test for it nor running the full test suite. When I remember to do that, surprise surprise I broke some tests. I didn’t know for sure which commit that introduces this bug, so I want to run the broken spec on the last few commits.
The following script did just that - this one is truly inspired by Gary’s screencast (note: broken down
to few lines for readability):
git log -5 --pretty=format:'%h' |
while read revision;
do echo "Checking out $revision";
git co $revision -b temp_branch;
be rspec spec/requests/customer_request_spec.rb;
git co master;
git br -D temp_branch;
Again could have been done better.
What the command above does is:
Firstly find the hashes of the last 5 revisions, pipe the result to the while loop. Inside the loop, check out the revision into a new branch, run the spec on that branch (be is my alias for bundle exec), check out master and delete the branch - repeat.