More Grep - Regular Expressions


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers More Grep - Regular Expressions
# 1  
Old 09-03-2005
More Grep - Regular Expressions

Hey all! I'm trying to search a file and return all instances of a word, let's say 'foo' in this case, as long as it's not a function name. For example:

1) int foo; //OK
2) //'this is totally fooed up' is also OK
3) int foo (int x, int y) //not ok to return

I've tried a lot of regular expressions but none of them work. Always is foo the function returned.

Here's what I think should work (but doesn't):

grep -E "foo[\s]*[\w]*[^(]" <filename

Any ideas as to why it doesn't work?
# 2  
Old 09-03-2005
Quote:
Originally Posted by Jombee
Here's what I think should work (but doesn't):

grep -E "foo[\s]*[\w]*[^(]" <filename

Any ideas as to why it doesn't work?
Can you try giving the same command without the '^' sign. That is supposed to match the start of the line.
# 3  
Old 09-03-2005
If I take out the ^ then grep matches nothing.

I'm not sure what you mean by it matches the beginning of a line...I thought that the ^ means not.

So basically, what I'm trying to express in a regular way is:

Return to me all the lines that have the string "foo" in them except when there is any amount of whitespace following the word "foo" that is then followed by a "(".

So, what's the deal?
# 4  
Old 09-03-2005
Code:
grep -E 'foo[^(]+$' filename

# 5  
Old 09-03-2005
Wow, that totally worked!

grep -E 'foo[^(]+$' index2.html

Can we go into this a little bit deeper?

-E: match using extended regular expressions.

[^(]: This is confusing me a little bit. Does this mean, "I don't care what comes after the string, as long as it's not a paranthesis?

+: This will happen one or more times

$: end of line?

Thank you so much, guys, for your help!
# 6  
Old 09-05-2005
Lets beak the pattern down: 'foo[^(]+$'

'foo' matches the string 'foo' anywhere in the line

'[^(]' matches any character except for a normal open braket '('

'+' means match 1 or more of the preceeding character class,in this case '[^(]'

'$' matches the end of the line

So verbosely, the pattern matches: the string 'foo' anywhere in the line followed by one or more characters to the end of the line as long as none of these characters is a '('.

The only case where this would not match a line you would probably want it to match is the case where the string 'foo' was at the end of a line.
# 7  
Old 09-05-2005
If you may have "foo" at the end of the line and still catch it you can use two regexps with the "-e" option:

grep -e "x" -e "y"

will find every "x" and "y".

hence:

grep -e "foo[^(][^(]*$" -e "foo$"

bakunin
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

grep and regular expressions

Hi All, For the past many days I have solved a lot of grep and regular expression questions, Now I am in a search for a good quality set of questions that can help me build and check my knowledge of grep with regular expressions, it would be great if anyone could help me with my requirement. ... (1 Reply)
Discussion started by: rahulkalra9
1 Replies

2. Homework & Coursework Questions

Regular Expressions with GREP

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Given a text file (big_english.txt) containing roughly 250,000 words, answer the following using grep and... (2 Replies)
Discussion started by: blahblahblah123
2 Replies

3. UNIX for Dummies Questions & Answers

extract columns using grep or regular expressions

I am trying to print columns from a table whose name (header) matches a certain string. E.g., patient1001 patient1002 patient2005 patient3005 patient4001 0 0 0 0 0 2 9 2 8 3 2 7 3 0 2 Say I want to print columns whose names end with "01" patient1001 patient4001 0 0 2 3 2 2 ... (3 Replies)
Discussion started by: quextil
3 Replies

4. Shell Programming and Scripting

Regular Expressions

Hi Ilove unix and alwyas trying to to learn unix,but i am weak in using regular expressions.can you please give me a littel brief discription that how can i understand them and how to use .your response could lead a great hand in my unix love. (1 Reply)
Discussion started by: manoj attri
1 Replies

5. Shell Programming and Scripting

Regular Expressions

I am new to shell scripts.Can u please help me on this req. test_user = "Arun" if echo "test_user is a word" else echo "test_user is not a word" (1 Reply)
Discussion started by: chandrababu
1 Replies

6. Shell Programming and Scripting

How to grep using a line break in regular expressions?

Hi, I have a file as below, {#### if file then file else file } print file i need to fine the count of all the pattern - file, inside the { } i'm using a grep command as grep -c \{'*file*'\} fake.sh\ It doesn't gives me any result, i think the problem here is the... (5 Replies)
Discussion started by: divak
5 Replies

7. Shell Programming and Scripting

Regular Expressions

#!/usr/bin/perl $word = "one last challenge"; if ( $word =~ /^(\w+).*\s(\w+)$/ ) { print "$1"; print "\n"; print "$2"; } The output shows that "$1" is with result one and "$2" is with result challenge. I am confused about how this pattern match expression works step by step. I... (8 Replies)
Discussion started by: DavidHe
8 Replies

8. UNIX for Dummies Questions & Answers

Regular expressions

In regular expressions with grep(or egrep), ^ works if we want something in starting of line..but what if we write ^^^ or ^ for pattern matching??..Hope u all r familiar with regular expressions for pattern matching.. (1 Reply)
Discussion started by: aadi_uni
1 Replies

9. Shell Programming and Scripting

searching regular expressions with special characters like dot using grep

hi everybody I am a new user to this forum and its previous posts have been very useful. I'm searching in a file using grep for patterns like 12.13.444 55.44.443 i.e. of form <digit><digit>.<digit><digit>.<digit><digit><digit> Can anybody help me with this. Thanks in advance (4 Replies)
Discussion started by: jpriyank
4 Replies

10. UNIX for Dummies Questions & Answers

grep and regular expressions :

I wrote a simple korn shell where I am trying to filter all the good record layouts of a file to only leave the bad ones to look at. That file is hudge. Aside from '# comments' and 'var=ssss', all record should follow a specific record layout, with comma seperated fields. Some fields can have any... (2 Replies)
Discussion started by: Browser_ice
2 Replies
Login or Register to Ask a Question