Estou escrevendo um script de verificação de erros com o PowerShell para examinar os logs do Bitvise SFTP e alertar se houver algum erro. No entanto, não quero que ele me alerte sobre a string "ERRO: abrindo arquivo local", pois isso indica apenas que o arquivo já existe no destino, o que é esperado. Não sou muito bom com regex e não consigo encontrar a combinação certa de elementos para encontrar erros além daquele que podemos ignorar.
Exemplo:
ERROR: Writing local file (I want to be alerted to this)
ERROR: Opening local file (I don't want to be alerted to this)
Como diz @spikey_richie, você precisa de um lookahead negativo :
Basicamente, em vez de especificar o que você está procurando, você especifica o que não deseja e o coloca dentro
(?!
de e)
.Demonstração
isso parece fazer o que você deseja - usa a maneira como PoSh pode aplicar uma correspondência de regex a uma coleção inteira. [ sorriso ]
o que faz ...
inteiro por uma chamada.
#region/#endregion
Get-Content
$Result
coleçãoo código ...
resultado ...
Algo assim deve funcionar também: Demonstração
Esta situação é semelhante àquelas apresentadas em The Greatest Regex Trick Ever --- uma ótima leitura para quem está aprendendo regex. Embora o lookahead negativo postado por Glorfindel funcione bem neste caso, esta técnica é facilmente expansível para múltiplas exclusões, lookbehinds combinados com lookaheads, etc. e ainda permanece legível. A essência do truque é capturar todas as exclusões na correspondência geral e o conteúdo desejado no Grupo 1. Para o OP, o regex ficaria assim:
Exemplo:
(No código de trabalho,
<Here-string> -Split "`n"
seria substituído por:
Get-Contnet 'c:\Path\To\Error.log'
)Captura de tela:
Mais uma vez, a beleza dessa técnica é que ela pode ser facilmente expandida:
'Exception1|Exception2|Exception3|(Desired Match)'