Multiplicar ciertos números en un archivo de texto por cierta constante

Multiplicar ciertos números en un archivo de texto por cierta constante

Quiero una solución alternativa paraeste truco de jQuery, probando un poco reinventar la rueda. Mira, estoy seguro de que podría hacer esto con una sola línea usando herramientas *ix básicas. Una forma mucho más fácil y directa es encontrar todos los números añadidos con px, algunos \d+pxcoinciden y luego multiplicarlos con una constante, pero \dfallará; coincida solo si no se antepone a un dígito [^\d]\d+pxy luego realice el reemplazo/multiplicación.

La solución más simple y elegante gana, ¿cómo se puede hacer coincidir-multiplicar-reemplazar?

Utilizo Vim pero estoy abierto a nuevas ideas.

Respuesta1

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>

Por supuesto, esto fallará en determinadas circunstancias, porque las expresiones regulares no son la forma de analizar HTML, comoconcluido en SO. Pero resolverlo con un analizador HTML dedicado ya no sería una cuestión de una sola línea.

Pero si está seguro de que no habrá conflictos con el texto plano que parece par de coordenadas, puede incluso reducirlo a esto:

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

información relacionada