![将文本文件中的某些数字乘以某个常数](https://linux22.com/image/22404/%E5%B0%86%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%9F%90%E4%BA%9B%E6%95%B0%E5%AD%97%E4%B9%98%E4%BB%A5%E6%9F%90%E4%B8%AA%E5%B8%B8%E6%95%B0.png)
我想要一个替代解决方案这个 jQuery 黑客,尝尝重新发明轮子的滋味 - 看起来我确信我可以使用基本的 *ix 工具通过一些单行代码来完成此操作。看起来更简单和直接的方法是找到所有附加有 px, some \d+px
-match 的数字,然后将其与一个常量相乘,但\d
会失败 - 仅当前面没有数字时才匹配[^\d]\d+px
,然后进行替换/乘法。
最简单、最优雅的解决方案获胜,如何进行匹配-乘法-替换?
我使用 Vim,但乐于接受新想法。
答案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>
当然,这在某些情况下会失败,因为正则表达式不是解析 HTML 的方法,如得出结论SO。但使用专用的 HTML 解析器解决问题将不再是一件简单的事情。
但是,如果您确定与坐标对纯文本不会发生冲突,您甚至可以将其简化为:
perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%!int($1*$w/100).",".int($2*$h/100)!ge' map.htm