Sed替换日期

时间:2015-07-10 18:24:13

标签: linux bash sed

所以,我已经查看了其他问题,似乎没什么特别的东西可以帮助我。我有一个日期变量设置为mm / dd / yyyy的文件,我想用日期替换。

例如:

version.js

//Application Version Information
app_date="7/07/2015";
...

我想用sed替换它。我实际上有一个shell脚本替换了这个文件中的很多东西,除了日期之外都有工作。目前我正在尝试的是:

sed -i -e 's:app_date="[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]":app_date="$(date %m/%d/%Y)":g'

但这并没有让我得到我想要的结果。我也试过了:

sed -ibak 's/app_date=\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"/app_date=\$(date +%m/%d/$Y)\"/g'

似乎都没有效果。

有什么想法吗?

编辑添加:

我成功聘用的解决方案是Sean Bright的双引号:

sed -i -e "s:app_date=".*";:app_date="$(date +%m/%d/%Y)";:g" version.js

这完全符合我的需要。

3 个答案:

答案 0 :(得分:2)

我敢打赌,如果您匹配的日期是10月10日,那么您的脚本将会有效...

sed -i -e 's:app_date="[0-9][0-9]*/[0-9][0-9]*/[0-9][0-9][0-9][0-9]":app_date="$(date %m/%d/%Y)":g'

如上所述,在日期和月份表达式之后添加* s。 [0-9][0-9]7不匹配。

现在我考虑一下,因为你不关心文件中已有的日期,大部分都是不必要的,你可以这样做:

sed -i -e 's:app_date=".*";:app_date="'$(date +%m/%d/%Y)'";:g' version.js

答案 1 :(得分:1)

你使用了错误的shell引号。命令替换$()不会在单引号内扩展。

sed -i "/^app_date=/capp_date=\"$(date +%m/%d/%Y)\";" version.js # GNU only

另一种方法,使用文件编辑器而不是流编辑器:

ed -s version.js << EOF
/^app_date=/c
app_date="$(date +%m/%d/%Y)";
.
w
EOF

答案 2 :(得分:1)

用Linux中的任何内容替换日期

n=`date +%d`

cal>temp

If [$n -lt 10]   

//10 is just a predction for condition


then

Sed s/"$n"/*/g temp   

else

Sed s/"$n"/**/g temp

fi

// s是替换选项的文本  // *是取代日期的任何东西 // g是全球替代