Do an OR search using grep to look for more than one search term

grep -i '<searchTerm>\|<someOtherSearchTerm>' <someFileName>
This is a simple but useful command to search for multiple terms in a file at once. This prevents you from having to do mutliple grep's of the same file.
Sample Output
~> cat myFile.txt
you today?

The World
~> grep -i 'hello\|world' myFile.txt
The World

2009-05-11 23:05:54

These Might Interest You

  • Takes the same arguments that ack does. E.g. ack-open -i "searchterm" opens all files below the current directory containing the search term. The search term is also highlighted within vim if you have hlsearch set. Works on zsh, unsure if it works on bash. Note: ubuntu users have to change ack to ack-grep unless you already have it aliased (as I do)

    ack-open () { local x="$(ack -l $* | xargs)"; if [[ -n $x ]]; then eval vim -c "/$*[-1] $x"; else echo "No files found"; fi }
    iynaix · 2011-10-04 08:56:18 0
  • Just feed classical duckduckgo request replacing the "!" for the bang by a "-" (ie. "ddg -gi mickey mouse") and the result will be opened in w3m (think of installing w3m-img for image support in xterm or tty) To put it in the .bashrc, remove the "\" that escapes the "!".

    ddg(){ search=""; bang=""; for term in $@; do if [[ "$term" =~ -([A-Za-z0-9._%+-]*) ]]; then bang="\!${BASH_REMATCH[1]}" ; else search="$search%20$term" ; fi ; done ; w3m "$bang$search" ;}
    boustrophedon757 · 2013-10-30 21:41:36 0
  • This is the best way I have found to search out an application when I am not sure the title. Grep is just to remove anything that does not contain the term in the title or short description (lots of things might include the search term in the description, such as libraries used by the application) Show Sample Output

    aptitude search ~d "irc client"|grep -i "irc client"
    tomjrace · 2011-07-11 19:48:55 0
  • Simple use of find and grep to recursively search a directory for files that contain a certain term.

    find /path/to/dir -type f -exec grep \-H "search term" {} \;
    root · 2009-01-26 16:32:14 0

What Others Think

This command is wrong. Most unixes do not have 'extended regular expression' operators (which include OR) on regular grep, only on extended grep (egrep) where this operator can not be quoted (preceded by a \). So, while in Linux this works, on AIX for example it does not. The correct, portable way to do it would be: egrep 'expression1|expression2' filename
Patola · 475 weeks and 4 days ago
definitely, use "egrep"
michauko · 475 weeks and 3 days ago
Or grep -i -e "term1" -e "term2"
flatcap · 475 weeks and 3 days ago
Thanks Patola! Does this work on the commandlinefu grep box ? :)
DaveQB · 475 weeks and 3 days ago

What do you think?

Any thoughts on this command? Does it work on your machine? Can you do the same thing with only 14 characters?

You must be signed in to comment.

What's this? is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.


Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: