Multiplizieren Sie bestimmte Zahlen in einer Textdatei mit einer bestimmten Konstante

Multiplizieren Sie bestimmte Zahlen in einer Textdatei mit einer bestimmten Konstante

Ich möchte eine alternative Lösung fürdieser jQuery-Hack, schmeckt ein bisschen nach Neuerfindung des Rades – ich bin sicher, ich könnte das mit einigen Einzeilern und grundlegenden *ix-Tools machen. Viel einfacher und unkomplizierter ist es, alle Zahlen mit angehängtem px zu finden, einige \d+px-matches zu finden und sie dann mit einer Konstanten zu multiplizieren, aber das \dwird fehlschlagen – nur matchen, wenn keine Ziffer vorangestellt ist [^\d]\d+px, und dann die Ersetzung/Multiplikation durchführen.

Die einfachste und eleganteste Lösung gewinnt. Wie können Sie Match-Multiplizieren-Ersetzen durchführen?

Ich verwende Vim, bin aber offen für neue Ideen.

Antwort1

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>

Natürlich wird dies unter bestimmten Umständen fehlschlagen, da reguläre Ausdrücke nicht die Art und Weise sind, HTML zu analysieren, daabgeschlossen am SO. Aber die Lösung mit einem dedizierten HTML-Parser wäre nicht mehr einzeilig.

Wenn Sie jedoch sicher sind, dass es keine Konflikte mit Klartext gibt, der nach Koordinatenpaaren aussieht, können Sie es sogar auf Folgendes reduzieren:

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

verwandte Informationen