Expressão regular estendida nova linha

1

Eu pareço combinar duas coisas usando expressões regulares estendidas:

  1. Newline. Eu tentei [ \n] , [ \n] , ambos não funcionam
  2. Lookahead negativo para string "timeout". Eu tentei (?! Tempo limite)

Alguém por favor pode apontar a maneira correta?

    
por snihalani 11.02.2013 / 02:57

1 resposta

3

Newline

Se você estiver usando o bash, você pode escrever $'\n' . Isso é expandido pelo shell, não pelo programa, por isso é mais confiável do que outras opções.

Se você estiver usando o traço (por exemplo, dentro de um script de shell), você sempre poderá usar uma nova linha com aspas literais:

'
'

Não é elegante, mas funciona.

Lookahead

Você terá que usar expressões regulares compatíveis com Perl ( -P ), já que as expressões regulares estendidas não suportam verificações antecipadas.

Muitas vezes, é suficiente para imitar as verificações negativas.

O uso da opção -v do grep geralmente faz isso:

grep -E 'PATTERN' | grep -vE 'PATTERNtimeout'

é equivalente a

grep -P 'PATTERN(?!timeout)'

Para imitar (?!timeout) dentro de outra expressão, você pode usar essa subexpressão:

(($|[^t])|t($|[^i])|ti($|[^m])|tim($|[^e])|time($|[^o])|timeo($|[^u])|timeou($|[^t]))
  • ($|[^t]) string termina aqui ou o primeiro caractere não é t .
  • t($|[^i]) string termina após t ou o segundo caractere não é i .
  • ti($|[^m]) string termina após ti ou o terceiro caractere não é tim .
  • ...

Se qualquer uma das correspondências acima, a string não for tempo limite .

    
por 11.02.2013 / 03:22

Tags