9

I want to use Unix's grep function to pull out multiple lines (with different keywords) from a file in one command line.

For example, I have something like:

doc-A1-151
file-A2-15646
table-A3-1654
file-B1-15654
doc-B2-15654
table-B3-13546
file-C1-164654
doc-C2-16354
table-C3-13565

And I want a sub-version of the file with just the A1, B3, and C2 lines.

How do I do that?

1

2 Answers 2

14

Grep allows you to use regular expressions to match patterns within the file using the -E flag, or you can use the egrep command which is equivalent to grep -E:

grep -E 'A1|B3|C2' filename

or

egrep 'A1|B3|C2' filename

The vertical bar, |, is the OR operator meaning match string A1 or B3 or C2.

Regular expression syntax varies from tool to tool, but generally the syntax is the same. Here is a regex test harness for Ruby that I use frequently to test and build regular expressions: http://rubular.com/r/mJyIMO5hJN

However, any introduction to regular expressions should be prefaced with a warning that they are limited in their capabilities, and the adage is:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

0
9

Found it. Put the terms in a text file separated by new lines, then enter that as the pattern to match with the -f flag.

pattern_file.txt:

A1
B3
C2

Command:

grep -f pattern_file.txt input_file.txt
1
  • grep -i -f <(echo boston; echo advent;echo gita) works but, each argument to echo must be a separate regex, as seen in my example
    – marinara
    Commented Apr 11, 2019 at 8:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .