2

I'd like to use Sed to find within a template.php file the unix timestamp portion of the name of a JS file and replace it with a current timestamp. The old timestamp will vary so I need a regex to match a number.

Here's what I have so far:

TimPeterson$ current_timestamp=date +%s
TimPeterson$ sed -i "" "s/myJS-[0-9]*\([0-9]\+\).js/myJS-$current_timestamp.js/" template.php

Just to be clear on the problem, what I need to match in the JS file name looks something like this (where the number part is variable):

myJS-1361297970.js

However, [0-9]*\([0-9]\+\) isn't correct.

4

3 回答 3

3

由于多种原因,目前的代码无法正常工作。将其与:

current_timestamp=`date +%s`
sed -ie "s/myJS-[0-9]\+\.js/myJS-${current_timestamp}.js/g" template.php

注释:

  1. date +%s必须在反引号内才能将程序执行的输出放入current_timestamp变量中
  2. 该模式[0-9]\+足以捕获具有一系列数字的所有名称。
  3. 我添加了大括号来分隔变量名
  4. 保护.js部分的点不要与元字符混淆.,它匹配除回车之外的任何字符。
  5. 我在替换中添加了一个“g”修饰符以在同一行中生成多个替换。
于 2013-02-19T21:16:37.940 回答
2
  • 你需要$(..)执行命令。current_timestamp=$(date +%s)

  • 你不必分组,只要简单myJs-[0-9]\+\.js就足够了。

  • 如果您的 sed 支持-r,它可以节省一些转义。

于 2013-02-19T21:20:35.880 回答
2

一种使用方式perl。我评估替换部分以date +%s从外壳中获取结果。最后一个tr命令删除该命令添加的附加换行符qx<...>

perl -i.bak -lpe 's/(myJS-)\d+(\.js)/$1 . qx<date +%s> . $2/eg && tr/\n//d' infile
于 2013-02-19T21:20:50.783 回答