grep & RegEx Syntax- How to Match?
Erik Trulsson
ertr1013 at student.uu.se
Mon May 17 08:36:40 PDT 2004
On Mon, May 17, 2004 at 08:13:41AM -0700, Drew Tomlinson wrote:
> I've learned a little about regular expressions and am trying to use
> them with grep. I want to parse my httpd log to return entries that
> contain a particular IP address and file ending in .htm or .html. I
> want to match lines like this one:
>
> 123.456.789.123 - - [17/May/2004:06:54:53 -0700] "GET
> /public/murphys/produced/tricks.html HTTP/1.0" 200 5446 "-"
> "Mozilla/4.77 [en] (X11; U; Linux 2.2.19 i686)"
Is that supposed to be a single line, or is it actually three lines in
the log.
That matters because grep works on lines.
I will assume that it is only line in the log.
>
> I'm using the this command:
>
> egrep -e ^123\.456\.789\.123.*htm.* /path/to/file
Try quoting the argument given to egrep, otherwise your shell might try
to expand '*' as a wildcard.
I.e. try
egrep -e '^123\.456\.789\.123.*htm.*' /path/to/file
>
> However this does not match anything. If I shorten the regex to
> ^123\.456\.789\.123, I match all entries with that IP address. And if I
> use 'htm' as the regex, I get match all lines with html files. But I
> can't find the right syntax to match on both conditions.
You could try piping the output from the first grep into a second grep.
For example:
grep '^123\.456\.789\.123' /path/to/file | grep 'htm'
--
<Insert your favourite quote here.>
Erik Trulsson
ertr1013 at student.uu.se
More information about the freebsd-questions
mailing list