我想使用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]\+\)
不正确。
答案 0 :(得分:2)
现有代码由于多种原因不起作用。将其与:
进行比较current_timestamp=`date +%s`
sed -ie "s/myJS-[0-9]\+\.js/myJS-${current_timestamp}.js/g" template.php
评论:
date +%s
必须在反引号内,才能将程序执行的输出转换为current_timestamp
变量[0-9]\+
足以捕获所有带有一系列数字的名称。.js
部分的点不要与元字符.
混淆,它匹配任何字符但回车。答案 1 :(得分:2)
您需要$(..)
来执行命令。 current_timestamp=$(date +%s)
您不必分组,只需myJs-[0-9]\+\.js
即可。
如果您的sed支持-r
,则可以节省一些转义。
答案 2 :(得分:2)
使用perl
的一种方法。我评估替换部分从shell获取date +%s
的结果。上一个tr
命令删除qx<...>
命令添加的其他换行符。
perl -i.bak -lpe 's/(myJS-)\d+(\.js)/$1 . qx<date +%s> . $2/eg && tr/\n//d' infile