Taking advantage of the grep command’s many options
The grep command makes it easy to find strings in text files on Linux systems, but that’s just a start. It can be used to search through these files for multiple strings or regular expressions at the same time. It can also ignore case when needed, and it can count the lines in the resulting output for you. This post shows how to use grep in all these ways.
Basic grep
The simplest grep command looks like the one shown below. This “find string in file” command will show all the lines in the file that contain the string, even when that string is only part of a longer one.
$ grep word story The wording suggests there was more to the story than anyone wanted to admit. The sword had been left behind the shed. It was several days before it was
Finding multiple strings
There are a number of ways to search for a group of strings in a single command. In the command below, the ‘|’ character serves as an “or” function. The command will display any lines in the file that contain the word “xray”, the word “tape” or both.
$ grep -E 'xray|tape' 4letters tape xray
The -E option allows “extended regular expressions” to provide this function. Another option is to list each string separately following the -e option.
$ grep -e xray -e tape 4letters tape xray
You can also use a command like the one below to find multiple strings. The “|” characters separate each word that you want to find.
$ grep 'xray|tape' 4letters tape xray
This form of grep command is not limited to two strings. Add as many strings as you need.
$ grep 'xray|tape|hope|boat' 4letters boat hope tape xray
You can also use regular expressions like ^xr in commands to look for strings that begin with particular letters.
$ grep '^xr|tape|hope|boat' ../4letters boat hope tape xray xref
The same search can be performed using grep‘s -e option. In this case, each string is included following its own -e.
$ grep -e ^xr -e tape -e hope -e boat 4letters boat hope tape xray xref
If you only want to find exact matches for your strings, use a command like the one below that will only display strings when they are included in the file as full words – not substrings. The command below fails to find the word “xray” because the “y” is omitted and the -w option is used.
$ grep -w 'xra|boat' 4letters boat
In the examples below, the line containing the word “session” is only included when the full word is used in the command.
$ grep -w 'fly|session' recording_commands When you first open a session on the command line, the oldest commands in their history command numbers during a single login session. want "on the fly". In other words, type "script" and each command that
$ grep -w 'fly|sessio' recording_commands want "on the fly". In other words, type "script" and each command that
Using regular expressions
Note that the grep -e command will allow you to search for strings that begin with a hyphen. Without the -e, this wouldn’t work.
$ grep -e -xray myopts -xray
The command below does not find the string.
$ grep -xray myopts
Ignoring case
To find strings in text files regardless of whether the letters are in uppercase or lowercase, use the grep command’s -i (ignore case) option. In the examples below, the word “it” is found 10 times in the first case and 11 times when the -i option is used.
$ grep 'it' recording_commands | wc -l 10 $ grep -i 'it' recording_commands | wc -l 11
Counting lines
And here’s a little surprise. Instead of using the wc command to count the lines in the grep output, you can use the grep command itself. Just add the -c (count) option. The commands below generate the same results as the previous two commands without piping the output to the wc command:
$ grep -c 'it' recording_commands 10 $ grep -ic 'it' recording_commands 11
Wrap-up
The grep command can do a lot more than find each instance of a single string in a text file. In fact, it can look for multiple strings in several different ways. It can also both ignore case and count the number of lines that match your request.
Copyright © 2023 IDG Communications, Inc.