snippetbashMinor
How to improve the way I handle greping in this script
Viewed 0 times
thisscriptthehandlewayimprovegrepinghow
Problem
What my script does is:
I need feedback on the way I am grepping for patterns in the continuously appended file. For grep, I am creating a pattern file first and then using it with -f option to grep. Can I do this better? Any other better way I can write my over all logic.
Here's my script
- Append data to a file on a continuous basis.
- If an error pattern is observed, then do something.
I need feedback on the way I am grepping for patterns in the continuously appended file. For grep, I am creating a pattern file first and then using it with -f option to grep. Can I do this better? Any other better way I can write my over all logic.
Here's my script
#!/bin/bash
# List of error patterns to look for. Add more patterns to this list
p1='pattern1'
p2='pattern2'
p3='pattern3'
p4='pattern4'
PATTERNFILE=~/patternfile
FILETOCHECK=~/filetocheck
captureFileToCheck()
{
//appends data into filetocheck &
}
createPatternFile()
{
for i in `seq 100` # hopefully 100 is all we will need
do
if [ ! "x$p{$i}" = "x" ]
then
echo $p{$i} >> $PATTERNFILE
else
break
fi
done
}
createPatternFile
captureFileToCheck
while [ 1 ]
do
if grep -f $PATTERNFILE $FILETOCHECK
then
echo "something starting"
#doSometing
echo "something complete"
break
fi
doneSolution
Use more quotes, as the saying goes.
I find
You might want to use an array for the patterns, then you can simply loop over it (
Uppercase variables are usually used for exports; that is, stuff which is relevant outside your script.
You should avoid cluttering
I find
while true is more clear, but the idiomatic while : is also popular.You might want to use an array for the patterns, then you can simply loop over it (
for pattern in "${patterns[@]}") instead of using seq and the if statement.Uppercase variables are usually used for exports; that is, stuff which is relevant outside your script.
You should avoid cluttering
~; use tmp_dir="$(mktemp -d)" instead.Context
StackExchange Code Review Q#8784, answer score: 3
Revisions (0)
No revisions yet.