2012-02-29 83 views
2

我有需要剪切的日誌文件,每行輸出DD-MM-YYYY HH:MM:SS。理想情況下,我想這樣的文件的最後10分鐘。如何在sed中包含perl命令?

我有一個Perl命令來獲取時間的10分鐘前:

perl -e 'use POSIX qw(strftime); print strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()- 600);' 

輸出示例:29-02-2012 16點38分14秒

和SED命令切斷該文件。這適用於手動日期和系統時間現在作爲第二個變量。我無法使用日期的更高級功能,因爲我正在使用Solaris 8以及c shell。

sed '1,/29-02-2012 16:07/d;/=$(date +%d-%m-%y %H:%M:%S")/,$d' debug.log | tee cut-log | less 

讚賞任何幫助...

+0

你有沒有gnu sed? – Kent 2012-02-29 16:55:24

+0

您可以使用TZ var操作Solaris 8日期(目前無法訪問那些東西),在comp.unix.shell中進行谷歌組搜索會帶來這種情況。看看你的系統是否安裝了GNU工具,通常在/ usr/local/bin中,這會讓事情變得更簡單。另外,雖然不是一個好的shell,但是你在做什麼,在csh中不應該是可能的。所有這一切說,我認爲下面的kev是正確的。祝你好運。 – shellter 2012-02-29 17:24:09

回答

1

$(date)不單引號字符擴大。更改爲雙引號。

sed "1,/29-02-2012 16:07/d;/=$(date +'%d-%m-%y %H:%M:%S')/,\$d" 
2

只需在perl中完成整個事情,使用..運算符。類似於

perl -MPOSIX -n -e 'print if /@{[ strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()- 600) ]}/ .. /@{[ strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()) ]}/ ' 

編輯:粘貼錯誤的代碼。我修復了它。

+0

原諒我,因爲我是新的,但我得到這個錯誤: > perl -MPOSIX -n -e'print if/$ {[strftime「%e-%m-%Y%H:%M:%S」 ,\ localtime(time() - 600)]}/../$ {[strftime「%e-%m-%Y%H:%M:%S」,\ localtime(time()]} /' 在-e行1,在「near」附近的語法錯誤)]「 執行-e因編譯錯誤而中止。 我是否將此信息傳遞給sed後? – dueyfinster 2012-03-01 10:05:29

+0

應該修復。 – 2012-03-01 19:29:06