我想用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]\+\)
是不正确的。
使用的方法之一perl
。 我评估替代部分得到的结果date +%s
从壳。 最后tr
命令删除所添加的额外的新行qx<...>
命令。
perl -i.bak -lpe 's/(myJS-)\d+(\.js)/$1 . qx<date +%s> . $2/eg && tr/\n//d' infile
该代码,因为它代表了几个原因无法正常工作。 与比较:
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
部分不与元字符混淆.
,匹配任何字符,但回车。 - 我添加了一个“G”改性剂替代,以产生数个取代在同一直线上。