http://www.linuxnix.com/grep-command-usage-linux
GREP is a command line search utility or tool to filter the input given to it. Grep got its name from ed editor as g/re/p (global / regular expression / print). Grep command can improve a command output by filtering out required information. Grep will become a killer command when we combined it with regular expressions. In this post we will see how to use grep in a basic way and then move on some advanced and rarely used options. In our next couple of posts we will see what grep can do with the help of regular expressions.
GREP command syntax
Example 2: Search for exact word “Nathan”
with out quotes:
1) Grep is considering second word in the command as file
2) Grep is considering just “Easy” as a search term.
Example 5: Search for exact search term using single quotes.
Example 6: Search for a shell variable in a file. My shell is NAME1 which is assigned with Nathan. See below examples with single and double quotes.
Example 7: If you want to inverse your search criteria ie to display all the lines which do not contain your search term then use -v option. This will display all the lines which do not contain your search term. Suppose list all the lines which do not contain Nathan in the file.
With out -w option:
Example 15: Search for a word and just list the file names which contains it with in a directory.
GREP is a command line search utility or tool to filter the input given to it. Grep got its name from ed editor as g/re/p (global / regular expression / print). Grep command can improve a command output by filtering out required information. Grep will become a killer command when we combined it with regular expressions. In this post we will see how to use grep in a basic way and then move on some advanced and rarely used options. In our next couple of posts we will see what grep can do with the help of regular expressions.
GREP command syntax
grep [options] [searchterm] filenameor
command | grep [options] [searchterm]Before starting grep command examples, I used below file which contain following content.
cat file1.txtOutput:
surendra 31 IBM Chennai Steve 45 BOA London Barbi 25 EasyCMDB Christchurch Max 25 Easy CMDB Christchurch Nathan 20 Wipro Newyark David 20 ai Newyark
Search single file using grep
Example 1: Search for a word “nathan” in file1.txtgrep nathan file1.txtYou dont get any output, as the word nathan is not there. By this type you should know grep is a case sensitive command. If you want specifically Nathan, use caps N in nathan and try once again.
Example 2: Search for exact word “Nathan”
root@linuxnix:~# grep Nathan file1.txt Nathan 20 Wipro NewyarkExample 3: Search for a word which has either capital or small letters in it, no confusion between nathan or Nathan. The -i for ignore case.
root@linuxnix:~# grep -i Nathan file1.txt Nathan 20 Wipro NewyarkExample 4: I suggest you always use single quotes for your search term. This will avoid confusions to gerp. Suppose if you want to search for “Easy CMDB” in a file, it will be difficult to search with out single quotes. Try below examples.
with out quotes:
root@linuxnix:~# grep Easy CMDB file1.txt grep: CMDB: No such file or directory file1.txt:Barbi 25 EasyCMDB Christchurch file1.txt:Max 25 Easy CMDB Christchurch
What grep did?
If you observe, you got an error stating that, there is no file called CMDB. That is true, there is no such file. This output have two issues1) Grep is considering second word in the command as file
2) Grep is considering just “Easy” as a search term.
Example 5: Search for exact search term using single quotes.
root@linuxnix:~# grep 'Easy CMDB' file1.txt Max 25 Easy CMDB ChristchurchYou may get a doubt why single quotes and not double quotes. You can use double quotes as well when you want to send bash variable in to search term.
Example 6: Search for a shell variable in a file. My shell is NAME1 which is assigned with Nathan. See below examples with single and double quotes.
root@linuxnix:~# NAME1=Nathan root@linuxnix:~# grep '$NAME1' file1.txtNo output, now try with double quotes
root@linuxnix:~# grep "$NAME1" file1.txt Nathan 20 Wipro Newyark root@linuxnix:~#See the difference? So it depends when you want to use single quotes and double quotes. If you want to pass shell variables to grep use double quotes and remaining time always use single quotes.
Example 7: If you want to inverse your search criteria ie to display all the lines which do not contain your search term then use -v option. This will display all the lines which do not contain your search term. Suppose list all the lines which do not contain Nathan in the file.
root@linuxnix:~# grep -v 'Nathan' file1.txt surendra 31 IBM Chennai Steve 45 BOA London Barbi 25 EasyCMDB Christchurch Max 25 Easy CMDB Christchurch David 20 ai NewyarkExample 8: How about getting count of a word in a file? Search for word ‘Easy’ and tell me how many times it is there in the file.
root@linuxnix:~# grep -c 'Easy' file1.txt 2Example 9: Ok, finding number of occurrence is fine, how about displaying line number as well for our search term? Search for Easy and display line number where that word is present.
root@linuxnix:~# grep -n 'Easy' file1.txt 3:Barbi 25 EasyCMDB Christchurch 4:Max 25 Easy CMDB ChristchurchExample 10: Some times you want to find exact word instead of finding occurrence of a word sequence. Suppose you want to find is word in a file, this will grep “this” as well as “this” contain “is” in it. Grep have a Technic to do this with the help of -w which filter out this type of stuff. Suppose I want to search for ai in our file, with normal grep it will print first and last lines as both contain ai in them. Use -w for avoiding this stuff.
With out -w option:
root@linuxnix:~# grep 'ai' file1.txt surendra 31 IBM Chennai David 20 ai NewyarkWith -w option:
root@linuxnix:~# grep -w 'ai' file1.txt David 20 ai NewyarkExample 11: Grep have special feature which can print lines before, after and between for a search term. Suppose if you want print two lines before to the search, use below example. Search for Max and below example prints two lines above search term as well. This will be handy when searching for log files.
root@linuxnix:~# grep -B 2 'Max' file1.txt Steve 45 BOA London Barbi 25 EasyCMDB Christchurch Max 25 Easy CMDB ChristchurchExample 12: Search for a word and print two lines after to this search
root@linuxnix:~# grep -A 2 'Barbi' file1.txt Barbi 25 EasyCMDB Christchurch Max 25 Easy CMDB Christchurch Nathan 20 Wipro NewyarkExample 13: Search for a word and print one line Before and after center to this search term
root@linuxnix:~# grep -C 1 'Max' file1.txt Barbi 25 EasyCMDB Christchurch Max 25 Easy CMDB Christchurch Nathan 20 Wipro Newyark
Search multiple files using grep
Example 14: Grep have one more feature which allows searching multiple files at a time. We no need to use grep for each file. Suppose you want to search for Nathan in /root folder recursively use below example.root@linuxnix:~# grep -r 'Nathan' /root/ Nathan 20 Wipro NewyarkThis will not display which file contain Nathan which may confuse you. We do not know from which file Nathan came. To avoid this confusion use below example.
Example 15: Search for a word and just list the file names which contains it with in a directory.
root@linuxnix:~# grep -l 'Nathan' /root/ file1.txtExample 16: Ok, again this command do not show the line which is again a confusion. In order to search multiple files and display their contents which matchs our search criteria use combination of -r and -n
root@linuxnix:~# grep -rn 'Nathan' /root/ file1.txt:5:Nathan 20 Wipro Newyark test.txt:1:Nathan abc xyz whoExample 17: Restrict your search to specific files. Suppose search only txt files.
root@linuxnix:~# grep -rn 'Nathan' *.txt file1.txt:5:Nathan 20 Wipro Newyark test.txt:1:Nathan abc xyz whoExample 18: Some times you may see below error when opening log files.
Binary fileThis error is because grep thinks it is a binary file. But our log files are never a binary one. This error is due to null value found in the log file. In order to read such files you have to use -a which tell grep to read this file as binary file.matches.
grep -a xyz abc.txtIn our next two posts we will see how to use grep with regular expressions.
No comments:
Post a Comment