Regex básico corresponde ao primeiro período [duplicado]

0

Estou tentando corresponder um termo de pesquisa a um primeiro período usando grep

Por exemplo, grep-ing através de

foobar searchterm. hello world.

deve imprimir foobar search term blah. Salve as opções acima em um arquivo de texto simples chamado search . Mas quando eu tento

grep -i 'searchterm.*\.'search

imprime

foobar searchterm blah. hello world.

em vez de parar depois de blá. O que estou errado aqui? A estrela do período .* deve corresponder a qualquer coisa até a primeira ocorrência de um período literal \. , certo?

    
por user192380123 02.07.2015 / 04:18

2 respostas

0

Por padrão, grep retorna linhas completas que contêm o padrão, não apenas o padrão correspondente.

Você pode usar a opção -o para exibir apenas o texto correspondente.

E você deve usar uma pesquisa não-gulosa para corresponder apenas ao primeiro período após o termo da pesquisa. Você precisará da sintaxe do Perl ( -P ) para isso com o modificador ? após o .* .

Tente algo assim:

grep -P 'searchterm.*?\.' -o search
    
por 02.07.2015 / 04:41
0

Seu regexp corresponde à linha inteira e grep por linhas correspondentes de saída padrão.

Você precisa dizer ao grep para produzir somente parted correspondente ao invés de toda a linha:

$ grep -iEo '.*searchterm.*?\.'

O sinal -E diz ao grep para usar o regexp estendido, que permite usar a correspondência .*? não-gulosa, para que ele pare no primeiro período.

Espero que ajude.

    
por 02.07.2015 / 04:41

Tags