使用sed来替换旧的时间戳与当前(Using Sed to replace old timestam

2019-10-17 17:16发布

我想用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]\+\)是不正确的。

Answer 1:

  • 你需要$(..)来执行命令。 current_timestamp=$(date +%s)

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

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



Answer 2:

使用的方法之一perl 。 我评估替代部分得到的结果date +%s从壳。 最后tr命令删除所添加的额外的新行qx<...>命令。

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


Answer 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”改性剂替代,以产生数个取代在同一直线上。


文章来源: Using Sed to replace old timestamp with current one
标签: linux bash sed