top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

Using grep commands in Vim editor

+4 votes
2,598 views

 Grep searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN. By default, grep prints the matching lines.

Regular expression is a pattern that describes a set of strings. Regular expressions are constructed analogously to arithmetic expressions, by using various operators to combine smaller expressions.

 

Tag Description

? :The preceding item is optional and matched at most once.

* :The preceding item will be matched zero or more times.

+: The preceding item will be matched one or more times.

{n} :The preceding item is matched exactly n times.

{n,}: The preceding item is matched n or more times.

{n,m}: The preceding item is matched at least n times, but not more than m times.

 

[agd] :the character is one of those included within the square brackets.

[^agd] :the character is not one of those included within the square brackets.

[c-f]: the dash within the square brackets operates as a range. In this case it means either the letters c, d, e or f.

() : allows us to group several characters to behave as one.

| (pipe symbol) :the logical OR operation.

^ :matches the beginning of the line.

$ :matches the end of the line.

 

 

1. Search for the given string in a single file

The basic usage of grep command is to search for a specific string in the specified file as shown below.

Syntax:

grep "string" filename

Ex: $ grep "this" demo_file

this line is the 1st lower case line in this file.

Two lines above this line is empty.

And this is the last line.

 

2. Checking for the given string in multiple files.

Syntax:

grep "string" FILE_PATTERN

This is also a basic usage of grep command. For this example, let us copy the demo_file to demo_file1. The grep output will also include the file name in front of the line that matched the specific pattern as shown below. When the Linux shell sees the meta character, it does the expansion and gives all the files as input to grep.

 

Ex: $ cp demo_file demo_file1

$ grep "this" demo_*

demo_file:this line is the 1st lower case line in this file.

demo_file:Two lines above this line is empty.

demo_file:And this is the last line.

demo_file1:this line is the 1st lower case line in this file.

demo_file1:Two lines above this line is empty.

demo_file1:And this is the last line.

 

3. Case insensitive search using grep -i

Syntax:

grep -i "string" FILE

This is also a basic usage of the grep. This searches for the given string/pattern case insensitively. So it matches all the words such as “the”, “THE” and “The” case insensitively as shown below.

Ex:  $ grep -i "the" demo_file

THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.

this line is the 1st lower case line in this file.

This Line Has All Its First Character Of The Word With Upper Case.

And this is the last line.

 

4. Match regular expression in files

Syntax:

grep "REGEX" filename

This is a very powerful feature, if you can use use regular expression effectively. In the following example, it searches for all the pattern that starts with “lines” and ends with “empty” with anything in-between. i.e To search “lines[anything in-between]empty” in the demo_file.

Ex:

$ grep "lines.*empty" demo_file

Two lines above this line is empty.

 

5. Checking for full words, not for sub-strings using grep -w

If you want to search for a word, and to avoid it to match the substrings use -w option. Just doing out a normal search will show out all the lines.

The following example is the regular grep where it is searching for “is”. When you search for “is”, without any option it will show out “is”, “his”, “this” and everything which has the substring “is”.

Ex:1

       $ grep -i "is" demo_file

THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.

this line is the 1st lower case line in this file.

This Line Has All Its First Character Of The Word With Upper Case.

Two lines above this line is empty.

And this is the last line.

 

The following example is the WORD grep where it is searching only for the word “is”. Please note that this output does not contain the line “This Line Has All Its First Character Of The Word With Upper Case”, even though “is” is there in the “This”, as the following is looking only for the word “is” and not for “this”.

 

Ex:2

$ grep -iw "is" demo_file

THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.

this line is the 1st lower case line in this file.

Two lines above this line is empty.

And this is the last line.

 

7. Highlighting the search using GREP_OPTIONS

As grep prints out lines from the file by the pattern / string you had given, if you wanted it to highlight which part matches the line, then you need to follow the following way.

When you do the following export you will get the highlighting of the matched searches. In the following example, it will highlight all the this when you set the GREP_OPTIONS environment variable as shown below.

Ex: $ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'

$ grep this demo_file

this line is the 1st lower case line in this file.

Two lines above this line is empty.

And this is the last line.

 

8. Searching in all files recursively using grep -r

When you want to search in all the files under the current directory and its sub directory. -r option is the one which you need to use. The following example will look for the string “ramesh” in all the files in the current directory and all it’s subdirectory.

Ex: $ grep -r "ramesh" *

 

9. Invert match using grep -v

You had different options to show the lines matched, to show the lines before match, and to show the lines after match, and to highlight match. So definitely You’d also want the option -v to do invert match.

When you want to display the lines which does not matches the given string/pattern, use the option -v as shown below. This example will display all the lines that did not match the word “go”.

Ex: $ grep -v "go" demo_text

 

10. Counting the number of matches using grep -c

When you want to count that how many lines matches the given pattern/string, then use the option -c.

Syntax:

grep -c "pattern" filename

Ex: $ grep -c "go" demo_text

6

 

When you want do find out how many lines matches the pattern:

Ex: $ grep -c this demo_file

3

 

When you want do find out how many lines that does not match the pattern

Ex: $ grep -v -c this demo_file

4

 

12. Display only the file names which matches the given pattern using grep -l

If you want the grep to show out only the file names which matched the given pattern, use the -l (lower-case L) option.

When you give multiple files to the grep as input, it displays the names of file which contains the text that matches the pattern, will be very handy when you try to find some notes in your whole directory structure.

Ex: $ grep -l this demo_*

demo_file

demo_file1

 

13. Show only the matched string

By default grep will show the line which matches the given pattern/string, but if you want the grep to show out only the matched string of the pattern then use the -o option.

It might not be that much useful when you give the string straight forward. But it becomes very useful when you give a regex pattern and trying to see what it matches as

Ex: $ grep -o "is.*line" demo_file

is line is the 1st lower case line

is line

is is the last line

 

14. Show the position of match in the line

When you want grep to show the position where it matches the pattern in the file, use the following options as

Syntax:

grep -o -b "pattern" file

Ex: $ cat temp-file.txt

12345

12345

 

Ex: $ grep -o -b "3" temp-file.txt

2:3

8:3

Note: The output of the grep command above is not the position in the line, it is byte offset of the whole file.

 

15. Show line number while displaying the output using grep -n

To show the line number of file with the line matched. It does 1-based line numbering for each file. Use -n option to utilize this feature.

Ex: $ grep -n "go" demo_text

5: * e - go to the end of the current word.

6: * E - go to the end of the current WORD.

7: * b - go to the previous (before) word.

8: * B - go to the previous (before) WORD.

9: * w - go to the next word.

10: * W - go to the next WORD.

 

posted Feb 29, 2016 by Ramya

  Promote This Article
Facebook Share Button Twitter Share Button LinkedIn Share Button


Related Articles

Power of VIM can be classified into following eight categories as compare to any other standard editor, which makes it distinct and more useful -

Line Traversing
Screen Traversing
Word Traversing
Special Traversing
Paragraph Traversing
Searching
Code Traversing
Traversing using command line

Line Traversing

k – Move upwards
j – Move downwards
l – Move right side
h – Move left side

Within a line if you want to traverse to different position, you have 4 other options.

0 – go to the starting of the current line.
^ – go to the first non blank character of the line.
$ – go to the end of the current line.
g_ – go to the last non blank character of the line.

Screen Traversing

H – Go to the first line of current screen.
M – Go to the middle line of current screen.
L – Go to the last line of current screen.
ctrl+f – Jump forward one full screen.
ctrl+b – Jump backwards one full screen
ctrl+d – Jump forward (down) a half screen
ctrl+u – Jump back (up) one half screen

Special Traversing

N% – Go to the Nth percentage line of the file.
NG – Go to the Nth line of the file.
G – Go to the end of the file.
`” – Go to the position where you were in NORMAL MODE while last closing the file.
`^ – Go to the position where you were in INSERT MODE while last closing the file.
g – Go to the beginning of the file.

Word Traversing

e – go to the end of the current word.
E – go to the end of the current WORD.
b – go to the previous (before) word.
B – go to the previous (before) WORD.
w – go to the next word.
W – go to the next WORD.

Here

WORD – WORD consists of a sequence of non-blank characters, separated with white space.
word – word consists of a sequence of letters, digits and underscores.

Paragraph Traversing

{ – Go to the beginning of the current paragraph.
} – Go to the end of the current paragraph.

Searching

/i – Search for a pattern which will you take you to the next occurrence of it.
?i – Search for a pattern which will you take you to the previous occurrence of it.
* - Go to the next occurrence of the current word under the cursor.
# - Go to the previous occurrence of the current word under the cursor.

Code Traversing

% – Go to the matching braces, or parenthesis inside code.

Traversing using Command Line

Vim +/pattern filename: Go to the particular pattern’s line inside the file, first occurrence from first.
vim +/install myfile --- it will open the myfile and jump to the first occurrence of the word “install”.

Vim +?patten filename: Go to the particular pattern’s line inside the file, first occurrence from last.
vim +?bug myfile -- it will open the myfile and jump to the last occurrence of the word “bug”.

Vim +N filename: Go to the Nth line of the file after opening it.

READ MORE
...