Grep not giving expected results


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Grep not giving expected results
# 1  
Old 06-12-2013
Grep not giving expected results

Version: RHEL 5.8

I am doing a grep of the piped output from ps command as shown below.
I am grepping for the pattern ora_dbw* . But, in the result set I am seeing strings with ora_dbr* as well like ora_dbrm_SDLM1DAS3 as shown below. Any idea why is this happening ?


Code:
$ ps -ef | grep ora_dbw*
oracle    2565     1  0 May30 ?        00:00:03 ora_dbrm_SDLM1DAS3 ---------> ????
oracle    2621     1  0 May30 ?        00:28:44 ora_dbw0_SDLM1DAS3
oracle    2627     1  0 May30 ?        00:27:09 ora_dbw1_SDLM1DAS3
oracle    2631     1  0 May30 ?        00:27:59 ora_dbw2_SDLM1DAS3
oracle    2635     1  0 May30 ?        00:28:13 ora_dbw3_SDLM1DAS3
oracle    3642     1  0 May30 ?        00:00:02 ora_dbrm_SDLM3DAS3 --------> ????
oracle    3708     1  0 May30 ?        00:00:19 ora_dbw0_SDLM3DAS3
oracle    3714     1  0 May30 ?        00:00:17 ora_dbw1_SDLM3DAS3
oracle    3718     1  0 May30 ?        00:00:16 ora_dbw2_SDLM3DAS3
oracle    3722     1  0 May30 ?        00:00:17 ora_dbw3_SDLM3DAS3
oracle    6653 15952  0 12:40 pts/0    00:00:00 grep ora_dbw*
oracle   32441     1  0 May31 ?        00:00:04 ora_dbrm_SDLM2DAS3
oracle   32507     1  0 May31 ?        00:30:49 ora_dbw0_SDLM2DAS3
oracle   32511     1  0 May31 ?        00:28:37 ora_dbw1_SDLM2DAS3
oracle   32515     1  0 May31 ?        00:28:53 ora_dbw2_SDLM2DAS3
oracle   32519     1  0 May31 ?        00:28:49 ora_dbw3_SDLM2DAS3
$

Tried enclosing the pattern in double quotes


Code:
$ ps -ef | grep "ora_dbw*"
oracle    2565     1  0 May30 ?        00:00:03 ora_dbrm_SDLM1DAS3
oracle    2621     1  0 May30 ?        00:28:44 ora_dbw0_SDLM1DAS3
oracle    2627     1  0 May30 ?        00:27:09 ora_dbw1_SDLM1DAS3
oracle    2631     1  0 May30 ?        00:27:59 ora_dbw2_SDLM1DAS3
oracle    2635     1  0 May30 ?        00:28:13 ora_dbw3_SDLM1DAS3
oracle    3642     1  0 May30 ?        00:00:02 ora_dbrm_SDLM3DAS3
oracle    3708     1  0 May30 ?        00:00:19 ora_dbw0_SDLM3DAS3
oracle    3714     1  0 May30 ?        00:00:17 ora_dbw1_SDLM3DAS3
oracle    3718     1  0 May30 ?        00:00:16 ora_dbw2_SDLM3DAS3
oracle    3722     1  0 May30 ?        00:00:17 ora_dbw3_SDLM3DAS3
oracle    8934 15952  0 12:44 pts/0    00:00:00 grep ora_dbw*
oracle   32441     1  0 May31 ?        00:00:04 ora_dbrm_SDLM2DAS3
oracle   32507     1  0 May31 ?        00:30:49 ora_dbw0_SDLM2DAS3
oracle   32511     1  0 May31 ?        00:28:37 ora_dbw1_SDLM2DAS3
oracle   32515     1  0 May31 ?        00:28:53 ora_dbw2_SDLM2DAS3
oracle   32519     1  0 May31 ?        00:28:49 ora_dbw3_SDLM2DAS3

# 2  
Old 06-12-2013
Remove the asterisk from the grep pattern.
This User Gave Thanks to hergp For This Post:
# 3  
Old 06-12-2013
Thank you hergp. Removal of asterik did the trick.

I have three questions on this ?

1. So, we are not supposed to use * (asterik) when using grep ?

2. What was the role of asterik in this particular instance
Code:
$ ps -ef | grep ora_dbw*

3. What is wild card character for grep ?
# 4  
Old 06-12-2013
1. grep interprets the pattern as a regular expression. Use the asterisk according to this.
2. In regular expressions the asterisk means match the preceding item zero or more times. In your case the letter "w" was matched zero times.
3. The wild card for any character is a dot. If you want to filter for strings starting with ora_dbw followed by any number of irrelevant characters you can formulate it like this:
Code:
ps -ef |grep "ora_dbw.*"


Last edited by cero; 06-12-2013 at 07:34 AM.. Reason: Expanded explanation of answer 2. + added quotes to the example...
This User Gave Thanks to cero For This Post:
# 5  
Old 06-12-2013
grep works with regular expressions (basic or extended) which differ from the shells pattern matching on filenames. If you use a * in a regular expression, it matches the preceding item zero or more time. Meaning you filtered for lines containing "ora_db" followed by zero or more "w".

In addition, if you do not quote the pattern, the shell will expand the *, if it can. So if you have a file "ora_dbw123" in your working directory for example, the shell will replace ora_dbw* with ora_dbw123 before executing grep.

See Man Page for grep for more details.
This User Gave Thanks to hergp For This Post:
# 6  
Old 06-13-2013
Cero said
In your case the letter "w" was matched zero times.


Actually in my case "w" was matched several times. But "r" was matched as well.

Yes its true when asterik is used in grep it matches the preceding charcter zero or more times.
The documentition should have also mentioned ,
" the preceding character's position will be matched with any characters from [a-Z] and [0-9] "

a test I did

Code:
$ cat a.txt
kebab
jumala
jum2love
jucca
scooter
jelatin
jumbo
jumper
jumbostapler
$
$
$ grep jumb* a.txt
jumala
jum2love
jumbo
jumper
jumbostapler

Here the position of "b" got matched with characters from [a-Z] and [0-9]

Last edited by John K; 06-13-2013 at 01:32 PM..
# 7  
Old 06-13-2013
Remember, zero or more matches, not one.

If you want to match 'jumb', just search for 'jumb', no modifiers needed.
This User Gave Thanks to Corona688 For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk not giving the output expected

Hello, I am practising awk and decided to compare two columns and print the result of the comparison as third column i/p data c1,c2,c3 1,a,b 1,b,b i am trying to compare the last two columns and if they match I am trying to print match else mismatch(Ideally i want that as a last column... (5 Replies)
Discussion started by: mkathi
5 Replies

2. Shell Programming and Scripting

For loop not giving expected output

#cat /tmp/input old_array old_dev new_dev new_array 0577 008AB 01744 0125 0577 008AC 01745 0125 0577 008AD 005C8 0125 0577 008AE 005C9 0125 0577 008AF 005CA 0125 0577 008B0 005CB 0125 0577 008B1 005CC 0125 cat test.sh #!/bin/ksh... (4 Replies)
Discussion started by: mbak
4 Replies

3. Shell Programming and Scripting

Comm giving unexpected results

Hi I am comparing two files with comm -13 < (sort acc11.txt) < (sort acc12.txt) > output.txt purpose: Get non matching records which are in acc12 but not in acc11... TI am getting WRONG output. Is there any constraints with record length with comm? The above files are the two consective ... (2 Replies)
Discussion started by: vedanta
2 Replies

4. Shell Programming and Scripting

Grep can't match expected but output all

lyang001@lyang001-OptiPlex-9010:~$ service --status-all |grep dbus acpid acpi-support alsa-restore alsa-store anacron apport atd avahi-daemon bluetooth cgroup-lite console-setup cron cups dbus dmesg dns-clean failsafe-x ... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

5. Shell Programming and Scripting

Sed in vi - \r and \n not giving desired results

I use many different machines at work, each with different versions of o/s's and installed applications. Sed in vi is particularly inconvenient in the sense that sometimes it will accept the "\r" as a carriage return, sometimes not. Same thing with "\n". For instance, if I have a list of hosts... (7 Replies)
Discussion started by: MaindotC
7 Replies

6. Programming

Test program not giving expected result

I have five classes. 2 composition classes,1 aggregation class and 1 dependency class.I have coded all the classes but one of my test program is not giving me the expected result.I have the following classes: TimeStamp Interval (composition of 2 TimeStamps) TimeSheet ( aggregation of many... (3 Replies)
Discussion started by: moraks007
3 Replies

7. HP-UX

find -mtime giving strage results in HP-UX

Hi, I am using HP-UX B.11.23 U ia64 I am trying to retrieve files using -mtime option of find command However I found that -mtime is not giving correct results Following is the output of commands executed on 03-Dec-2009 It can be seen that -mtime +1 should have returned all... (2 Replies)
Discussion started by: Chetanaz
2 Replies

8. Shell Programming and Scripting

awk script giving unstable results

Hi all Here I came accross a situation which i am unable to reason out... snippet 1 psg ServTest | grep -v "grep" | grep -v "vi" | awk '{ pgm_name=$8 cmd_name="ServTest" gsub(/]*/,"",pgm_name) if(pgm_name==cmd_name) { print "ServTest Present =" cmd_name} }'... (10 Replies)
Discussion started by: Anteus
10 Replies

9. Shell Programming and Scripting

egrep not giving desired results

I have written a shell script which looks like below: grep -v ',0,' ./DATA/abc.001 > ./DATA/abc.mid egrep $GREPSEARCH ./DATA/ebc.mid > ./DATA/abc.cut the variable GREPSEARCH has values like the below: ... (3 Replies)
Discussion started by: igandu
3 Replies

10. Shell Programming and Scripting

Script giving wrong results....

hi, I have this script which gives me the result... #! /usr/bin/sh set -x cd /home/managar a=1 while true do if then echo " File log.txt exists in this directory " exit 0 fi echo " File has not arrived yes..." sleep 3 let a=a+1 if then (1 Reply)
Discussion started by: mgirinath
1 Replies
Login or Register to Ask a Question