Tenho certeza de que seu problema está no regexp. Você precisará mover a asserção antecipada na frente do caractere curinga para corresponder somente as linhas que não terminam em discard . Por exemplo, ^(?!.* discard$)(.*)$ .
Depois de fazer essa alteração, você terá um problema adicional em que as linhas vazias também corresponderão - provavelmente indesejáveis. Use algo como ^(?!.* discard$)(.+)$ para corrigir esse problema, combinando um ou mais caracteres com .+ (em vez de zero ou mais, .* ).
Como alternativa, você pode usar uma declaração lookbehind, como em ^(.+)(?<! discard)$ .