2014-08-27 48 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