使用Sed将旧的时间戳替换为当前时间戳



我想使用Sed在template.php文件中找到JS文件名称的unix时间戳部分,并将其替换为当前时间戳。旧的时间戳会有所不同,所以我需要一个正则表达式来匹配一个数字。

到目前为止,我拥有的是:

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

为了明确这个问题,我需要在JS文件名中匹配的内容如下(其中数字部分是可变的):

myJS-1361297970.js

但是,[0-9]*([0-9]+)不正确。

由于多种原因,目前的代码不起作用。将其与进行比较

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"修饰符,以便在同一行中生成多个替换
  • 您需要$(..)来执行该命令。current_timestamp=$(date +%s)

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

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

单向使用perl。我对替换部分进行了评估,以从外壳中获得date +%s的结果。最后一个tr命令将删除由qx<...>命令添加的附加换行符。

perl -i.bak -lpe 's/(myJS-)d+(.js)/$1 . qx<date +%s> . $2/eg && tr/n//d' infile

最新更新