Grep within a script

Hi,

I am new to this - I have a unix command (below) that I would like to make automated. I would like the script to run the below command line but would like user input for '\[11 \]' and '\[075871-A-28APR08\]' as these values will change depending on what i'm searching for. Is this possible? if so please help.

grep '\[11 \]' REUTERS_200804*.log | grep '\[075871-A-28APR08\]'

Thanks Darren

#!/bin/sh
grep "$1" REUTERS_200804*.log | grep "$2"

Usability and error handling left as an exercise.

Thanks I will give it a go

I am stuck and not sure how to begin

Copy/paste that into a text file, say "gep", chmod +x gep, start debugging. You'd use it like gep pattern1 pattern2

Ok thanks will do

hope this works for you

please add this in a script and change the permissions to chmod 755 for that file to make it executable.

#!/bin/sh

echo "enter the first value : \c";
read first_value

echo "enter the second value : \c";
read second_value

grep "\[$fist_value \]" REUTERS_200804*.log | grep "\[$second_value\]";

exit 0;

That is very cool. Thanks! Now how could i debug it to make sure that it is working. For example, i have 2 files in my home directory which is the same place that i am running the script from. For the first value, i put in 2do (i have a file with that name) and also the name of the script for the second value (grepscript.sh). How long should it take it to find those values...in your best guess. I am running a vmware machine on Solaris 10

thank you

The script allows you to enter the strings, but not the file to grep in. That was not in the initial requirement.

Also, you would need to fix the spelling of "fist_value" (^:

Passing the strings to grep for on the command line is a little cumbersome, but allows you to improve your searches iteratively if your shell has a history mechanism. Scripts which prompt you are easy for beginners, but you quickly grow out of using them.

If you want to avoid having to type the backslashed square brackets, you can internalize those into the script:

#!/bin/sh

case $# in 1|2) echo "Syntax: $0 string1 string2 files ..." >&2; exit 1;; esac

first=$1
shift
second=$2
shift

grep "\\[$1\\]" "$@" | grep "\\[$2\\]"

The search time will depend on the number of items in each file (and on the complexity of the search strings, but you are just searching for literal strings which are relatively long, so nothing very complex there). You must know better than any of us how long these things typically take. But chappidi_pradee's script expected the search strings, not file names, as input.

On another note, if you think the backslashes are cumbersome, fgrep will only search for literal strings, so doesn't need backslashes (and indeed, if you put in backslashes, or square brackets, it will search for those characters literally).

Thanks, much appreciated - it gives me a good start and a little more understanding.

Is there anyway I can do the same for the date - ie user input?

I tried a similar format to the scripts already given but it doesnt work

The one I pasted above allows you to specify two search strings, and an arbitrary number of input files. It should not be too hard to extend to fill in part of the file name automagically if you want to specify just the date and have the script know to "pad" it with the right directory name and extension etc.

Thanks Era - I have managed to implement the user date input.

Ok, I can now run this script and choose which parts I want to grep and the date I want to check - I have another question but not sure this can be done.

When I use grep to grep out tag 39 and its value, is there anyway I can get the script to display [11 ] [055152-A-09MEI08] as this is a ref number

e.g.

01:59:36 -- sending request [type=8|desc=Execution Report]
| [35 ] [8]
| [57 ] []
| [115 ] [
]
| [128 ] []
| [50 ] [
]
| [56 ] []
| [49 ] [
]
| [34 ] [3]
| [52 ] [20080515-05:59:36]
| [15 ] [EUR]
| [22 ] [4]
| [48 ] [FR0000120404]
| [55 ] [FR0000120404]
| [38 ] [150]
| [32 ] [0]
| [75 ] [20080515]
| [54 ] [1]
| [59 ] [6]
| [44 ] [50]
| [31 ] [0]
| [60 ] [20080515-00:45:55]
| [126 ] [20080630-23:00:00]
| [39 ] [4]
| [20 ] [0]
| [37 ] [***]
| [14 ] [0]
| [6 ] [0]
| [17 ] [12108311550651]
| [11 ] [055152-A-09MEI08]
| [8 ] [FIX.4.0]
| [9 ] [0287]
| [10 ] [059]