3

Usually, grep searches for all lines containing a match for the pattern/parameter I specify.

I would like to match just the pattern (i.e. not the whole line).

So, if a file contains the lines:

We said that we'll come.
Unfortunately, we were delayed.
Now, we're on our way.
Didn't I say we'd come?

I want to find all contractions starting with "we" (regex pattern: we\'[a-z]+/i); I'm looking for the output:

we'll
we're
we'd

How do I do this (with grep or another Unix/Windows command-line tool)?

  • I took a look at the 'grep' man page: linux.die.net/man/1/grep and nothing suggested what you want is possible. You might want to try using 'sed' or 'awk'. If really feeling adventurous, even write a 2-5 line script in PERL. – Rolnik Jan 3 '11 at 20:41
3

Use the -o option:

grep -E -i -o "we'[a-z]+" file.txt

Note that this is not universally portable to all grep implementations, though.

  • My grep has it, so that works for me! – palswim Jan 5 '11 at 0:38
0

I'd prefer Perl for something like this:

#!/usr/bin/perl

use strict;
use warnings;

open FH, "< parse.txt" or die $!;

while(<FH>)
{
    while($_ =~ /\b(we\'\w+)\b/g)
    {
        print $1."\n";
    }
}

close FH;

Input text:

Some text we're test we'll why we're.
More text we'll we're.
Test.

Output:

we're
we'll
we're
we'll
we're
  • Instead of hardcoding the filename, you should make it accept a filename as an argument and work as a filter. Also, I believe the OP wanted case-insensitive. – Dennis Williamson Jan 3 '11 at 21:35
  • @Dennis it was an example... – John T Jan 3 '11 at 23:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.