텍스트 파일의 일부 숫자에 상수를 곱합니다.

텍스트 파일의 일부 숫자에 상수를 곱합니다.

대체 솔루션을 원합니다이 jQuery 해킹, 바퀴를 재발명하는 맛 - 기본 *ix 도구를 사용하여 일부 단일 라이너로 이 작업을 수행할 수 있다고 확신하는 것 같습니다. 더 간단하고 간단한 방법은 px가 포함된 모든 숫자를 찾고 \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

관련 정보