Printing Lines Containing a Pattern
Problem
You need to look for lines matching a given RE in one or more files.
Solution
As I’ve mentioned, once you have an RE package, you can write
the grep
program.
I gave an example of the Unix grep program
earlier. grep is called with some optional
arguments, followed by one required regular expression pattern,
followed by an arbitrary number of filenames. It prints any line that
contains the pattern, differing from Section 4.8,
which only prints the matching text itself. For example:
grep "[dD]arwin" *.txt
searches for lines containing either “darwin” or
“Darwin” on any line in any file whose name ends in
“.txt”.[18]
Example 4-1 is the source
for the first version of a program to do this, called
Grep1. It doesn’t yet take any optional
arguments, but it handles the full set of regular expressions that
the RE class implements. We haven’t covered the
java.io package for input and output yet (see
Chapter 9), but our use of it here is simple
enough that you can probably intuit it. Later in this chapter, Section 4.14 presents a Grep2 program
that uses my GetOpt (see Section 2.8) to parse command-line options.
import org.apache.regexp.*; import java.io.*; /** A command-line grep-like program. No options, but takes a pattern * and an arbitrary list of text files. */ public class Grep1 { /** The pattern we're looking for */ protected RE pattern; /** The Reader for the current file */ protected BufferedReader d; /** Construct a Grep object for each ...