<div><div class="gmail_quote">Em 22 de março de 2010 20:26, breno <span dir="ltr">&lt;<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>&gt;</span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

grande MM, pode fazer um teste pra mim?<br></blockquote><div><br></div><div>Mas é claro! :)</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

se as strings procuradas não são expressões regulares, experimente:<br></blockquote><div><br></div><div>Não são mesmo. São:</div><div><br></div><div>string1 = prompt</div><div>string2 = commit</div><div><br></div><div>Já vou deixá-las no código.</div>

<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">cat OLD.log | perl -nle &#39;print if index($_,q[string]) != 0 and<br>
index($_,q[string2]) != -1&#39; &gt; NEW.log</blockquote><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">index(string, substring) retorna o índice da substring dentro de $_<br>


(começando por 0) e retorna -1 se a string nao for encontrada. No<br>
código acima, estamos imprimindo apenas se &quot;string&quot; não estiver no<br>
início e &quot;string2&quot; não estiver na frase.<br></blockquote><div><br></div><div>Para a última condição, index($_,q[string2]) precisa ser == a -1, e não !=, correto?</div><div><br></div><div>O resultado foi:</div><div>

<br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log | perl -nle &#39;print if index($_,q[prompt]) != 0 and index($_,q[commit]) == -1&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m38.238s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m5.884s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m6.248s</font></div>

<div><br></div><div> </div><div>Para mantermos a comparação com minha pergunta original:</div><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log | perl -nle &#39;print if !/^prompt/ &amp;&amp; !/commit/;&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m40.017s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m5.532s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m6.300s</font></div>

<div><br></div><div>Meu primeiro teste leeeento:</div></div><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log | perl -nle &#39;print if !/^prompt|commit/;&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">5m5.918s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">4m51.326s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m7.392s</font></div>

<div><br></div></div><div><br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Se quiser brincar, podemos também voltar à expressões regulares e<br>
tentar estudar o escalar antes de aplicar a ER:<br>
<br>
cat OLD.log | perl -nle &#39;study; print if !/^string1|string2/&#39; &gt; NEW.log<br></blockquote><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log| perl -nle &#39;study; print if !/^prompt|commit/&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">4m48.147s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">4m34.873s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m7.820s</font></div>

<div><br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
cat OLD.log | perl -nle &#39;study; print if !/^string1/ &amp;&amp; !/string2/&#39; &gt; NEW.log<br></blockquote><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log| perl -nle &#39;study; print if !/^prompt/ &amp;&amp; !/commit/&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m41.106s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m9.957s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m6.924s</font></div>

<div><br></div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">como é um teste relativamente simples, não sei o ganho exato disso<br>
(pode ser até que piore o desempenho). Outra alternativa é o //o, que<br>
não achei na documentação mas se não me falha a memória serve pra<br>
pré-compilar e otimizar ERs estáticas (como a sua):<br>
<br>
cat OLD.log | perl -nle &#39;print if !/^string1|string2/o&#39; &gt; NEW.log<br></blockquote><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log| perl -nle &#39;print if !/^prompt|commit/o&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">5m11.024s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">4m57.051s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m7.624s</font></div>

<div><br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
cat OLD.log | perl -nle &#39;print if !/^string1/o &amp;&amp; !/string2/o&#39; &gt; NEW.log<br></blockquote><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">$ time cat OLD.log| perl -nle &#39;print if !/^prompt/o &amp;&amp; !/commit/o&#39; &gt; NEW.log</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">real</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m42.083s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">user</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m5.232s</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">sys</font><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        </font></span><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">0m6.912s</font></div>

<div><br></div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">de repente até juntar isso com o study, sei lá. Ainda aposto no<br>
&#39;index&#39; pra ser o mais rápido ;-)<br></blockquote><div><br></div><div>Bom, eu não usei um ambiente de teste completamente livre de interferências, mas acho que deu para ter uma idéia que a grande diferença é mesmo o OU dentro da regex. De resto ficou tudo muito próximo, com o index ligeiramente mais ligeiro. :)</div>

<div><br></div><div>[]s, MM</div></div></div>