所以,我已经查看了其他问题,似乎没什么特别的东西可以帮助我。我有一个日期变量设置为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
这完全符合我的需要。
答案 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是全球替代