2014-08-27 80 views
-2

请指定更换最近日期为&时间的变量。在bash shell中查找并替换

这是我的要求。

FN='basename$0' 

TS=`date '+%m/%d/%Y %T'` 

QD='08/27/2014 16:25:45' 

然后我有一个查询运行。运行后,我需要采取$TS(当前系统日期&时间)并将其作为值分配给$QD变量。这是一个循环过程,每次脚本运行时都会更新。

我试过使用sed但没有成功。

请帮忙。

+3

你可以发布你试过的sed命令吗? – 2014-08-27 23:59:56

+0

嗯......'QD =“$ TS”'?还是你的意思是别的? – jpaugh 2014-08-28 00:00:55

+0

虽然这是在shell脚本中... – RKP 2014-08-28 00:03:26

回答

0

虽然你还没有提到你想要完成的总体目标,但我有一种感觉,比起使用sed来更新现有的脚本文件更强大。

FN='basename$0' 

TS=date '+%m/%d/%Y %T' 

# Load the latest QD (from the last run) 
[ -e ~/.QD.saved ] && QD="`cat ~/.QD.saved`" 
QD='08/27/2014 16:25:45' 

......后来在该文件中...

#Save the new QD variable 
echo '$(date +$FORMAT)'" > ~/.QD.saved 
+0

那么目标是检查数据库查询错误。一旦执行查询QD值必须更新到最新,所以当脚本再次运行时,它需要的时间后,执行 – RKP 2014-08-28 00:50:15

+2

我不明白你的问题,你有j ust将当前日期分配给“TS” - 再次对“QD”执行操作有什么困难。另外,我会推荐'QD = $(日期+%Y%m%d-%H%M%S)',它会生成一个易于排序的日期代码。 – 2014-08-28 01:16:58

+0

查询需要运行更早的时间。脚本每15分钟运行一次 – RKP 2014-08-28 01:19:33

0

虽然我不知道,如果sed的就是你要找的工具,我相信你的命令将不得不像这样的:

sed -i -r 's/^QD=.*/QD="$TS"/g' "$FN" 

我假设你正在使用的GNU sed的,它与-i选项告诉做一个就地替代,而不是复制输入行到模式空间。

那么,希望它有帮助。

1

以编程方式修改您的脚本以具有不同的时间戳常量是绝对和重点错误的方式来处理此问题。

相反,当你想标记该查询已经完成,只需触摸一个文件:

touch lastQueryCompletion 

...当你想知道什么时候该查询的最后完成,检查文件的时间戳:

# with GNU date 
QD=$(date -r lastQueryCompletion '+%m/%d/%Y %T') 

# or, with Mac OS X stat 
QD=$(stat -t '%Y/%m/%d %H:%M:%S' -f '%Sm' lastQueryCompletion) 
+0

+1教我日期-r。这会派上用场。 – jpaugh 2014-08-30 20:34:53