Multiplique certos números em um arquivo de texto por uma constante

1

Eu quero uma solução alternativa para esse jQuery hack , provando um pouco reinventando a roda - veja, eu tenho certeza que eu poderia fazer isso com um one-liner usando ferramentas básicas * ix. A maneira mais fácil e direta é encontrar todos os números anexados com px, alguns \d+px -match e depois multiplicá-lo com uma constante, mas \d irá falhar - somente se não for precedido por um dígito [^\d]\d+px a substituição / multiplicação.

A solução mais simples e mais elegante ganha, como você pode fazer o jogo-multiplicar-substituir?

Eu uso o Vim, mas aberto a novas idéias.

    
por Community 18.04.2012 / 16:31

1 resposta

1

bash-4.2$ cat map.htm 
<map name="world">
  <area shape="rect" coords="0%,0%,32%,32%" >
  <area shape="rect" coords="8%,40%,50%,80%" >
  <area shape="rect" coords="56%,4%,84%,18%" >
  <area shape="rect" coords="74%,20%,90%,40%" >
  <area shape="rect" coords="70%,42%,96%,62%" >
  <area shape="rect" coords="0%,74%,70%,95%" >
</map>

bash-4.2$ perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%,(\d+)%,(\d+)%!($1*$w/100).",".($2*$h/100).",".($3*$w/100).",".($4*$h/100)!ge' map.htm 
<map name="world">
  <area shape="rect" coords="0,0,204.8,153.6" >
  <area shape="rect" coords="51.2,192,320,384" >
  <area shape="rect" coords="358.4,19.2,537.6,86.4" >
  <area shape="rect" coords="473.6,96,576,192" >
  <area shape="rect" coords="448,201.6,614.4,297.6" >
  <area shape="rect" coords="0,355.2,448,456" >
</map>

É claro que isso falhará em determinadas circunstâncias, porque as expressões regulares não são a maneira de analisar o HTML, pois concluiu o SO . Mas resolver com um analisador HTML dedicado não seria mais uma linha única.

Mas, se você tiver certeza de que não haverá conflitos com texto simples de par de coordenadas, poderá até reduzi-lo para isso:

perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%!int($1*$w/100).",".int($2*$h/100)!ge' map.htm
    
por 18.04.2012 / 16:51