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

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

Quero uma solução alternativa paraesse hack do jQuery, provando um pouco de reinventar a roda - tenho certeza que poderia fazer isso com alguma linha usando ferramentas *ix básicas. Parece que uma maneira muito mais fácil e direta é encontrar todos os números anexados com px, alguns \d+px-match e então multiplicá-los por uma constante, mas \dfalhará - combine apenas se não for prefixado por um dígito [^\d]\d+pxe então faça a substituição/multiplicação.

A solução mais simples e elegante vence. Como você pode fazer a correspondência-multiplicação-substituição?

Eu uso o Vim, mas estou aberto a novas ideias.

Responder1

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 irá falhar em certas circunstâncias, porque expressões regulares não são a forma de analisar HTML, comoconcluído em SO. Mas resolver com um analisador HTML dedicado não seria mais uma tarefa simples.

Mas se você tiver certeza de que não haverá conflitos com o texto simples com aparência de pares de coordenadas, você pode até reduzi-lo a isto:

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

informação relacionada