grep: padrão de correspondência em uma posição específica

1

Eu preciso corresponder um padrão com grep , somente se ele começar na posição 16. Vamos supor que eu queira corresponder à string ' pattern' (começando com espaço).

O seguinte deve corresponder

bla bla bla bla pattern

Considerando que o seguinte não deve corresponder, porque o padrão de pesquisa não começa em pos. 16:

bla bla bla bla foo foo pattern

Eu tentei usar essa expressão regular

egrep '.*\{15\} pattern'

mas isso não parece funcionar como desejado.

Alguém pode sugerir uma solução?

    
por Martin Vegter 02.04.2014 / 15:15

1 resposta

2

Acho que o que você está procurando é:

grep -E '^.{15} pattern'

Isso ficará bem na maioria dos casos de uso. No entanto, note que ele não "corresponderá" apenas à parte pattern , mas tudo antes disso também será incluído na partida. Você verá isso destacando grep (se --color for fornecido diretamente ou tiver sido incluído em um alias de shell). Sem cor, isso afetará grep -o , que imprime apenas a parte correspondente. Por exemplo:

$ echo 'bla bla bla bla pattern' | grep -Eo '^.{15}( pattern)'
bla bla bla bla pattern

Para evitar isso com o GNU grep, você pode usar uma expressão perl com o olhar para trás. Por exemplo:

$ echo 'bla bla bla bla pattern' | grep -Po '(?<=^.{15}) pattern'
 pattern

Isso 'corresponde' somente à parte pattern .

    
por 02.04.2014 / 15:33