want to search for the words in the files

Hi Friends,

I have been trying to write the script since morning and reached some where now. but i think i am stuck in the final step. please help

I want to search the strings below in red in the be be searched in the directories below. How can i do that in my shell script.

Thanks
Adi

Words to be searched: com.ibm.rational.clearcase.common.feature
Words to be searched: com.ibm.rational.clearcase.dotnet.feature
Words to be searched: com.ibm.rational.clearcase.multisite
Words to be searched: com.ibm.rational.clearcase.mvfs
Words to be searched: com.ibm.rational.clearcase.standalone.feature
Words to be searched: com.ibm.rational.clearcase.top
Words to be searched: com.ibm.rational.clearcase.zOS
Words to be searched: com.ibm.rational.cmlibrary
Words to be searched: com.ibm.rational.cmserver
Words to be searched: com.ibm.rational.teamapi.feature
Words to be searched: com.ibm.rational.tslogger

************************************************

The path to directories:-

The Path is: /home/administrator/testfix/install/cq.offering/com.ibm.rational.cl
earquest.ec.assembly
The Path is: /home/administrator/testfix/install/cq.offering/com.ibm.rational.cl
earquest.iehs.assembly
The Path is: /home/administrator/testfix/install/pjc.offering/com.ibm.rational.p
jc.main.assembly
The Path is: /home/administrator/testfix/install/reqpro.offering/com.ibm.rationa
l.reqpro.main.assembly
The Path is: /home/administrator/testfix/install/rls.offering/com.ibm.rational.l
icense.server.assembly.assembly
The Path is: /home/administrator/testfix/install/robot.offering/com.ibm.rational
.robot.main.assembly.assembly
The Path is: /home/administrator/testfix/install/soda.offering/com.ibm.rational.
soda.assembly
The Path is: /home/administrator/testfix/install/tm.offering/com.ibm.rational.te
stmanagermain.assembly

*****************************************************
The script is :-

#!/bin/sh

ECHO=/bin/echo
CAT=/bin/cat
LS=/bin/ls
AWK=/bin/awk
GREP=/bin/grep

FIX_XML_PATH=/home/administrator/testfix/fix
FIX_FILE=`$LS $FIX_XML_PATH | $GREP xml`
OFFERING_FILE_PATH=/home/administrator/testfix/install/*.offering
OFFERING_FILE=`$LS $OFFERING_FILE_PATH | $GREP assembly`

Y=`$CAT $FIX_XML_PATH/$FIX_FILE | $GREP id | $AWK '{if($2 ~ /id=/) print $2}' |
awk -F"'" '$1 == "id=" {print $2}'`

for i in $Y
do
$ECHO "Words to be searched:"  $i
done

for z in $OFFERING_FILE
do
$ECHO "The Path is:" $OFFERING_FILE_PATH/$z
done

Can you please edit your post to use code tags? It's pretty hard to read. Thx

find $OFFERING_FILE_PATH/$z -exec grep -l $i {} \;

Hi Peterro,

I tried what you said but did not work. I want all the string marked in red in all the directories one by one and only if the red string is present in more then one directory then print those directories and the string.
how do i do that?

Thanks
Aditya

The -l switch to grep give the location of the file that has the match and not the matches themselves. Adjust as necessary.

for i in $Y
do
  $ECHO "Words to be searched:" $i
  for z in $OFFERING_FILE
  do
    $ECHO "The Path is:" $OFFERING_FILE_PATH/$z
    find $OFFERING_FILE_PATH/$z -exec grep -l $i {} \;
  done
done

Hi Peterro,

I have a problem here, the output not come like this, which is not correct as for example string "CCRCWebServerINSTALLDIR" only apprears in com.ibm.rational.clearcase.assembly.assembly, but is shows its appearing in so many directories?

What changes should be made to the logic?

Thanks
Adi

Words to be searched: CCRCWebServerINSTALLDIR
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.assembly.assembly
/home/administrator/testfix/install/cc.offering/com.ibm.
rational.clearcase.assembly.assembly
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.iehs.assembly
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.rc.assembly /home/admini
strator/testfix/install/ccrc.offering/com.ibm.rational.c
learcase.rc.assembly
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.rc.assembly /home/admini
strator/testfix/install/ccrc.offering/com.ibm.rational.c
learcase.rc.assembly
The Path is: /home/administrator/testfix/install/ccrc.of
fering/com.ibm.rational.clearcase.rc.main.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.designer.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.ec.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.iehs.assembly
The Path is: /home/administrator/testfix/install/pjc.off
ering/com.ibm.rational.pjc.main.assembly
The Path is: /home/administrator/testfix/install/reqpro.
offering/com.ibm.rational.reqpro.main.assembly
The Path is: /home/administrator/testfix/install/rls.off
ering/com.ibm.rational.license.server.assembly.assembly
The Path is: /home/administrator/testfix/install/robot.o
ffering/com.ibm.rational.robot.main.assembly.assembly
The Path is: /home/administrator/testfix/install/soda.of
fering/com.ibm.rational.soda.assembly
The Path is: /home/administrator/testfix/install/tm.offe
ring/com.ibm.rational.testmanagermain.assembly
Words to be searched: ClearCaseAdministrationTools-ent-C
INSTALLDIR
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.assembly.assembly
/home/administrator/testfix/install/cc.offering/com.ibm.
rational.clearcase.assembly.assembly
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.iehs.assembly
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.rc.assembly /home/admini
strator/testfix/install/ccrc.offering/com.ibm.rational.c
learcase.rc.assembly
The Path is: /home/administrator/testfix/install/cc.offe
ring/com.ibm.rational.clearcase.rc.assembly /home/admini
strator/testfix/install/ccrc.offering/com.ibm.rational.c
learcase.rc.assembly
The Path is: /home/administrator/testfix/install/ccrc.of
fering/com.ibm.rational.clearcase.rc.main.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.designer.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.ec.assembly
The Path is: /home/administrator/testfix/install/cq.offe
ring/com.ibm.rational.clearquest.iehs.assembly
The Path is: /home/administrator/testfix/install/pjc.off
ering/com.ibm.rational.pjc.main.assembly
The Path is: /home/administrator/testfix/install/reqpro.
offering/com.ibm.rational.reqpro.main.assembly

I think you're mistaking the output of the script: "The path is...." line with the output of the find. If that is the case, comment out the "The path is:..." line.

The actual find output seems to be finding 2 files.

Hi Peterro,

I removed the -l from the find and changed that to find $OFFERING_FILE_PATH/$z -exec grep $i {} \;

But the out put is some thing like this, but i want only the red part to be displayed because thats the only this i need, rest all dont contain that string.

How do i do that?

Thanks
Adi

Words to be searched: CCRCWebServerINSTALLDIR
The Path is: /home/administrator/testfix/install/cc.offering/
com.ibm.rational.clearcase.assembly.assembly
  <includedShareableEntity id="CCRCWebServerINSTALLDIR">^M
The Path is: /home/administrator/testfix/install/cc.offering/
com.ibm.rational.clearcase.iehs.assembly
The Path is: /home/administrator/testfix/install/cc.offering/
com.ibm.rational.clearcase.rc.assembly /home/administrator/te
stfix/install/ccrc.offering/com.ibm.rational.clearcase.rc.ass
embly
The Path is: /home/administrator/testfix/install/cc.offering/
com.ibm.rational.clearcase.rc.assembly /home/administrator/te
stfix/install/ccrc.offering/com.ibm.rational.clearcase.rc.ass
embly
The Path is: /home/administrator/testfix/install/ccrc.offerin
g/com.ibm.rational.clearcase.rc.main.assembly
The Path is: /home/administrator/testfix/install/cq.offering/
com.ibm.rational.clearquest.assembly
The Path is: /home/administrator/testfix/install/cq.offering/
com.ibm.rational.clearquest.designer.assembly
The Path is: /home/administrator/testfix/install/cq.offering/
com.ibm.rational.clearquest.ec.assembly
The Path is: /home/administrator/testfix/install/cq.offering/
com.ibm.rational.clearquest.iehs.assembly
The Path is: /home/administrator/testfix/install/pjc.offering
/com.ibm.rational.pjc.main.assembly
The Path is: /home/administrator/testfix/install/reqpro.offer
ing/com.ibm.rational.reqpro.main.assembly
The Path is: /home/administrator/testfix/install/rls.offering
/com.ibm.rational.license.server.assembly.assembly
The Path is: /home/administrator/testfix/install/robot.offeri
ng/com.ibm.rational.robot.main.assembly.assembly
The Path is: /home/administrator/testfix/install/soda.offerin
g/com.ibm.rational.soda.assembly
The Path is: /home/administrator/testfix/install/tm.offering/
com.ibm.rational.testmanagermain.assembly
bin/sh

ECHO=/bin/echo
CAT=/bin/cat
LS=/bin/ls
AWK=/bin/awk
GREP=/bin/grep

FIX_XML_PATH=/home/administrator/testfix/fix
FIX_FILE=`$LS $FIX_XML_PATH | $GREP xml`
OFFERING_FILE_PATH=/home/administrator/testfix/install/*.offe
ring
OFFERING_FILE=`$LS $OFFERING_FILE_PATH | $GREP assembly`

Y=`$CAT $FIX_XML_PATH/$FIX_FILE | $GREP id | $AWK '{if($2 ~ /
id=/) print $2}' | awk -F"'" '$1 == "id=" {print $2}'`

for i in $Y
do
 $ECHO "Words to be searched:" $i
 for z in $OFFERING_FILE
  do
   $ECHO "The Path is:" $OFFERING_FILE_PATH/$z
   find $OFFERING_FILE_PATH/$z -exec grep  $i {} \;
  done
done

You could set the output of the find to a variable and check if the variable is not null and then echo "The path is..." line as well as the find variable. That way only the paths that are found are displayed.