2015-02-10 56 views
-3

我正在學習linux腳本,我排練了現有的主題,請大家幫忙。 幫助需要避免在日期時間格式的單引號構造日期時間過去2分鐘,如 - '-e 2015-02-09 11:56. * INFO -e 2015-02-09 11:55. *信息'Linux腳本 - 在日期時間壓制單引號

當我使用像$X 這樣的變量中的字符串時,它會轉換like-:-e 2015-02-09 '11:56. * INFO'-e 2015-02-09 '11:55. * INFO' 與時間值之前的單引號

我需要一些幫助,我怎麼能代替$x爲: -e「2015年2月9日11:56,* INFO」 -e「2015年2月9日11:55 。* INFO'

以下是我的示例腳本:

#!/usr/bin/ksh -x 
TEST_HOME=/home/ 
TEST_HOME_FILE=/home/tempop.txt 
LOG_FILE=/home/testlogMin.txt 


echo "test before" 
grepPattern='' 
cnt=1 
finalGrepPattern='' 
timeInMin=2 
while [[ $cnt -le $timeInMin ]]; do 
     echo $cnt 
    date_var=`date --date="$cnt minutes ago" "+%Y-%m-%d %H:%M` 
     #grepPattern=$grepPattern" -e "`date --date="$cnt minutes ago" "+%Y-%m-%d %H:%M"`".*INFO" 
     #grepPattern=$grepPattern" -e "`date --date="$cnt minutes ago" "+%Y-%m-%d %H:%M"`".*INFO" 
     grepPattern="${grepPattern} -e ${date_var}"".*INFO" 
     #grepPattern=$grepPattern" -e "`date --date="$cnt minutes ago" "+%Y-%m-%d %H:%M"`".*ERROR" 
     #grepPattern=$grepPattern" -e "`date --date="$cnt minutes ago" "+%Y-%m-%d %H:%M"`".*WARNING" 
     #grepPattern=$grepPattern" -e \""`date --date="$cnt minutes ago" "+%Y-%m-%d %H:%M"`".*INFO"\" # I changed this line 
     ((cnt++)) 
done 

finalGrepPattern=$grepPattern 
echo ">>>>>>>>>>>>>>>>>>" 
echo "$finalGrepPattern" 
echo "*******" 
echo $finalGrepPattern 
echo "<<<<<<<<<<<<<<<<<" 
if [ -s $LOG_FILE ]; then 
     echo "File $LOG_FILE exists and its non-zero in size. Proceeding with greping last 10 mins file contents." 
    echo "$LOG_FILE" 
    egrep $finalGrepPattern $LOG_FILE > $TEST_HOME/tempop.txt 
    chmod 755 $TEST_HOME/tempop.txt 
    echo "after egrep" 
    if [ -s $TEST_HOME_FILE ]; then 
     echo "$TEST_HOME_FILE is not empty. Sending the file to XXXX server." 
    fi 
else 
    echo "Did not find LOG_FILE GE ZERO" 
fi 
exit; 

下面是最近運行的輸出日誌:

[[email protected] ~]$ ./test 
+ TEST_HOME=/home/XXXXX 
+ TEST_HOME_FILE=/home/XXXXX/tempop.txt 
+ LOG_FILE=/home/XXXXX/testlogMin.txt 
+ echo 'test before' 
test before 
+ grepPattern='' 
+ cnt=1 
+ finalGrepPattern='' 
+ timeInMin=2 
+ [[ 1 -le 2 ]] 
+ echo 1 
1 
+ date '--date=1 minutes ago' '+%Y-%m-%d %H:%M' 
+ date_var='2015-02-09 19:52' 
+ grepPattern=' -e 2015-02-09 19:52.*INFO' 
+ ((cnt++)) 
+ [[ 2 -le 2 ]] 
+ echo 2 
2 
+ date '--date=2 minutes ago' '+%Y-%m-%d %H:%M' 
+ date_var='2015-02-09 19:51' 
+ grepPattern=' -e 2015-02-09 19:52.*INFO -e 2015-02-09 19:51.*INFO' 
+ ((cnt++)) 
+ [[ 3 -le 2 ]] 
+ finalGrepPattern=' -e 2015-02-09 19:52.*INFO -e 2015-02-09 19:51.*INFO' 
+ echo '>>>>>>>>>>>>>>>>>>' 
>>>>>>>>>>>>>>>>>> 
+ echo ' -e 2015-02-09 19:52.*INFO -e 2015-02-09 19:51.*INFO' 
-e 2015-02-09 19:52.*INFO -e 2015-02-09 19:51.*INFO 
+ echo '*******' 
******* 
+ echo -e 2015-02-09 '19:52.*INFO' -e 2015-02-09 '19:51.*INFO' 
2015-02-09 19:52.*INFO -e 2015-02-09 19:51.*INFO 
+ echo '<<<<<<<<<<<<<<<<<' 
<<<<<<<<<<<<<<<<< 
+ [ -s /home/XXXXX/testlogMin.txt ] 
+ echo 'File /home/XXXXX/testlogMin.txt exists and its non-zero in size. Proceeding with greping last 10 mins file contents.' 
File /home/XXXXX/testlogMin.txt exists and its non-zero in size. Proceeding with greping last 10 mins file contents. 
+ echo /home/XXXXX/testlogMin.txt 
/home/XXXXX/testlogMin.txt 
+ egrep -e 2015-02-09 '19:52.*INFO' -e 2015-02-09 '19:51.*INFO' /home/XXXXX/testlogMin.txt 
+ 1> /home/XXXXX/tempop.txt 
egrep: 19:52.*INFO: No such file or directory 
egrep: 19:51.*INFO: No such file or directory 
+ chmod 755 /home/XXXXX/tempop.txt 
+ echo 'after egrep' 
after egrep 
+ [ -s /home/XXXXX/tempop.txt ] 
+ exit 

回答

0

我有一個粗液,最好您連接的日期字符串之前完成,使用TR和sed:

x="2015-02-09 '11:56.*INFO'" 

x=`echo "$x" | tr -d "'" | sed "s/\([0-9].*INFO\)/'\1'/g"` 

使用如果你有兩個日期字符串和'-e',這使得解析困難。

0

單引號沒有問題。引號僅在調試輸出中添加,因爲要避免*(星號)擴展。刪除shebang中的調試標誌-x。您不能修改調試輸出:

+ echo -e 2015-02-09 '19:52.*INFO' -e 2015-02-09 '19:51.*INFO' 
2015-02-09 19:52.*INFO -e 2015-02-09 19:51.*INFO 

+其調試輸出開始的行;)


[/]$ ksh -c "echo *" 
archive bin boot cdrom dev etc hdd home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin source srv sys tmp usr var vertica vmlinuz vmlinuz.old 

[/]$ ksh -c "echo '*'" 
*