Não sei por que o Perl não é aceitável aqui. Nas entradas que você forneceu, esta linha fornece a saída que você pediu:
perl -0777p -e 's/.* > (.*) joined the channel\.\n(((?!.* (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.* disconnected)//mg' irc.txt
O argumento -e
é exatamente o primeiro argumento para o seu magicregextool
, exceto que eu adicionei o modificador /mg
regex. Isso pode não ser "não modificado", mas também não parece irracional. Se você não quiser digitar a linha inteira, que tal esse script como magicregextool
:
#!/usr/bin/perl -0777p
BEGIN { $::arg = shift @ARGV; }
eval $arg;
Ou até mesmo:
#!/bin/sh
perl -0777pe $*
Depois, basta digitar:
magicregextool 's/.* > (.*) joined the channel\.\n(((?!.* (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.* disconnected)//mg' irc.txt
Qual é o mesmo que a sua amostra (mais uma vez além de adicionar o modificador /mg
).
Um benefício adicional para isso é que, se você estiver executando várias operações de pesquisa / substituição relacionadas em cada arquivo, poderá reuni-las no mesmo script:
#!/usr/bin/perl -0777p
s/.* > (.*) joined the channel\.\n(((?!.* (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.* disconnected)//mg;
s/(some other\n)matched text//mg;