Regular Expression in grep

Prerequisite: grep

Basic Regular Expression

Regular Expression provides an ability to match a “string of text” in a very flexible and concise manner. A “string of text” can be further defined as a single character, word, sentence or particular pattern of characters.

Like the shell’s wild–cards which match similar filenames with a single expression, grep uses an expression of a different sort to match a group of similar patterns.

  • [ ]: Matches any one of a set characters
  • [ ] with hyphen: Matches any one of a range characters
  • ^: The pattern following it must occur at the beginning of each line
  • ^ with [ ] : The pattern must not contain any character in the set specified
  • $: The pattern preceding it must occur at the end of each line
  • . (dot): Matches any one character
  • \ (backslash): Ignores the special meaning of the character following it
  • *: zero or more occurrences of the previous character
  • (dot).*: Nothing or any numbers of characters.

Examples

(a) [ ] : Matches any one of a set characters

  1. $grep  “New[abc]”  filename
    

    It specifies the search pattern as :

    Newa , Newb or Newc
    
  2. $grep  “[aA]g[ar][ar]wal”  filename
    

    It specifies the search pattern as

    Agarwal , Agaawal , Agrawal , Agrrwal
    
    agarwal , agaawal , agrawal , agrrwal
    


(b) Use [ ] with hyphen
: Matches any one of a range characters

  1. $grep  “New[a-e]” filename
    

    It specifies the search pattern as

    Newa , Newb or Newc , Newd, Newe
    
  2. $grep  “New[0-9][a-z]”  filename
    

    It specifies the search pattern as: New followed by a number and then an alphabet.

    New0d, New4f etc
    

(c ) Use ^: The pattern following it must occur at the beginning of each line

  1. $grep  “^san”  filename
    

    Search lines beginning with san. It specifies the search pattern as

    sanjeev ,sanjay, sanrit , sanchit , sandeep etc.
    
  2. $ls –l |grep  “^d” 
    

    Display list of directories only

  3. $ls –l |grep  “^-” 
    

    Display list of regular files only

(d) Use ^ with [ ]: The pattern must not contain any character in the set specified

  1. $grep  “New[^a-c]”  filename
    

    It specifies the pattern containing the word “New” followed by any character other than an ‘a’,’b’, or ‘c’

  2. $grep  “^[^a-z A-Z]”  filename
    

    Search lines beginning with an non-alphabetic character

(e) Use $: The pattern preceding it must occur at the end of each line

$ grep "vedik$" file.txt

(f) Use . (dot): Matches any one character

$ grep "..vik" file.txt
$ grep "7..9$" file.txt

(g) Use \ (backslash): Ignores the special meaning of the character following it

  1. $ grep "New\.\[abc\]" file.txt

    It specifies the search pattern as New.[abc]

  2. $ grep "S\.K\.Kumar" file.txt
    

    It specifies the search pattern as

    S.K.Kumar
    

(h) Use *: zero or more occurrences of the previous character

$ grep "[aA]gg*[ar][ar]wal" file.txt


(i) Use (dot).*
: Nothing or any numbers of characters.

$ grep "S.*Kumar" file.txt

 

This article is contributed by Akshay Rajput. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Article Tags :

2


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.