Como muitas, se não a maioria, de ferramentas de análise de texto, perl
pode receber entrada da linha de comando, não há necessidade de cat
. Você só precisa de -e
, que permite passar um script como um parâmetro de linha de comando e -n
, que significa "executar o script em cada linha de entrada". Como alternativa, você pode usar a opção -p
, que significa "executar o script em cada linha de entrada e, em seguida, imprimir essa linha". Estes dois comandos são equivalentes (mas o segundo é um uso inútil de gato clássico, use o primeiro):
perl -pe 's/foo/bar/' file
cat file | perl -pe 's/foo/bar/'
Agora, se bem entendi, você deseja excluir todos os comentários do LaTeX (embora não seja isso que a sua pergunta indique). Nesse caso, um lookbehind é a maneira mais fácil:
perl -pe 's/(?<!\)%.*//' file
Seu regex também deve funcionar, você só precisa manter o caractere correspondente antes do %
e escapar da barra invertida:
perl -pe 's/(^|[^\]+)%.*/$1/' file
Você pode fazer o mesmo com o GNU sed
:
sed -r 's/(^|[^\])%.*//' file