Corresponde exatamente (e somente) o padrão que eu especifico em um comando grep

3

Normalmente, grep procura por todas as linhas que contêm uma correspondência para o padrão / parâmetro I especifique.

Gostaria de corresponder apenas ao padrão (ou seja, não à linha inteira).

Então, se um arquivo contiver as linhas:

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

Eu quero encontrar todas as contrações começando com "we" (padrão regex: we\'[a-z]+/i ); Estou procurando a saída:

we'll
we're
we'd

Como faço isso (com grep ou outra ferramenta de linha de comando Unix / Windows)?

    
por palswim 03.01.2011 / 21:09

2 respostas

3

Use a opção -o :

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

Observe que isso não é universalmente portável para todas as implementações de grep .

    
por 03.01.2011 / 21:52
0

Eu prefiro o Perl para algo assim:

#!/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;

texto de entrada:

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

Saída:

we're
we'll
we're
we'll
we're
    
por 03.01.2011 / 21:45