Caso específico de 'grep' não ganancioso

1

Eu sei que há muitos exemplos de um regex não ganancioso com o grep, mas estou tendo problemas com meu caso específico.

Meu arquivo contém linhas semelhantes a:

[X12345.Yabc.Z7989].[ALPHA/BRAVO].[CHARLIE.DELTA]

e estou tentando analisar apenas a parte X12345 .
Ou seja, a parte que começa com X e até o primeiro período ( . )

Meu exemplo mais próximo até agora é:

grep -Eo "X(.*?)\."  inputfile

Mas isso é muito ganancioso (embora eu ache que usei .*? corretamente.

Alguém pode ajudar a me guiar para uma regex adequada?

    
por abelenky 09.08.2012 / 01:00

1 resposta

2

Você está usando .* corretamente, mas como você percebeu, está comendo o máximo de caracteres possível em sua correspondência porque . corresponde a qualquer caractere. Você poderia fazer:

grep -Eo "X([^.]*?)\." inputFile

Isso corresponde a um X seguido por qualquer seqüência de comprimento de qualquer ponto não ( [^.]* ) até algum caractere ( ? ) e um ponto ( \. ). Você diz que está interessado em tudo entre o primeiro X e o primeiro. no entanto, você pode simplificar isso ainda mais:

grep -Eo "X[^.]*\." inputFile
    
por 09.08.2012 / 03:48

Tags