살려주세요~ 퇴근하고 싶어요 ㅠㅠ egrep 내에서 $변수를 사용할때 에러
글쓴이: help@osori.org / 작성시간: 월, 2007/10/29 - 6:36오후
안녕하세요 쉘스크립트를 짜던도중 에러에 막려 질문을 올립니다.
cat $FILENAME | grep "${DATE}" | grep "*CORRECT NEEDED*" | egrep '(${NOWDATE2}0[0-9]|${NOWDATE2}1[0-9])'
돌리게 되면
egrep: 정규식 앞에 ?, * 또는 +가 올 수 없습니다.
나오네요...
shell 환경은 ksh 이고
OS는 HP-UX 입니다.
ksh이던 bash 든 별반 차이는 없을텐데..
참이를 어째야 하는지..
실제 소스와 실행 결과를 같이 올립니다.
참고로 이쉘은 매시 1-9분 20~29분 40~49분 에만 실행됩니다.
즉 20분 단위 결과를 처리하기 위함입니다.
쉘중 time.pl 과 time_1h.pl 은 시간값을 처리하기위한 단순한 perl로 신경쓰지 않으셔도 될듯 합니다.
20분 전의 시간값을 가져오는 perl
cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cat time.pl #!/usr/bin/perl #################################################### # Calculate Date # Usage : calcDate.pl intValue #################################################### #-- Count of Arguments ($#ARGV is MaxValue of ARGV Array (start from ZERO) ) $CountOfARGS = $#ARGV + 1; #-- Init calculate Value $calValue = 0; #-- get calculate Value ($ARGV[0]) #-- if (val <> 0) ==> true if ($CountOfARGS) { $calValue = $ARGV[0];} #-- $getdate <- Millisecond (after 1970) [ ex. 1105577872 ] $getdate = time; #-- $today <- Current Date [ ex. Thu Jan 13 09:59:24 2005 ] $today = localtime; #-- Calculate Date $calDate = localtime ($getdate + (60 * 20) * $ARGV[0]); #-- print today and calculated date print ""; print ""; #print "$today\n"; print "$calDate\n"; cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs %
1시간 전의 시간값을 가저오는 perl
cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cat time_1h.pl #!/usr/bin/perl #################################################### # Calculate Date # Usage : calcDate.pl intValue #################################################### #-- Count of Arguments ($#ARGV is MaxValue of ARGV Array (start from ZERO) ) $CountOfARGS = $#ARGV + 1; #-- Init calculate Value $calValue = 0; #-- get calculate Value ($ARGV[0]) #-- if (val <> 0) ==> true if ($CountOfARGS) { $calValue = $ARGV[0];} #-- $getdate <- Millisecond (after 1970) [ ex. 1105577872 ] $getdate = time; #-- $today <- Current Date [ ex. Thu Jan 13 09:59:24 2005 ] $today = localtime; #-- Calculate Date $calDate = localtime ($getdate + (60 * 60) * $ARGV[0]); #-- print today and calculated date print ""; print ""; #print "$today\n"; print "$calDate\n"; cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs %
리스트 파일
cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cat test.txt *CORRECT NEEDED* [2007-10-29 17:00:04] bbbbbbbbbbbbbbbbbb 1 *CORRECT NEEDED* [2007-10-29 17:02:04] bbbbbbbbbbbbbbbbbb 2 *CORRECT NEEDED* [2007-10-29 17:05:04] bbbbbbbbbbbbbbbbbb 3 *CORRECT NEEDED* [2007-10-29 17:10:04] bbbbbbbbbbbbbbbbbb 4 *CORRECT NEEDED* [2007-10-29 17:12:04] bbbbbbbbbbbbbbbbbb 5 *CORRECT NEEDED* [2007-10-29 17:15:04] bbbbbbbbbbbbbbbbbb 6 *CORRECT NEEDED* [2007-10-29 17:20:04] bbbbbbbbbbbbbbbbbb 7 *CORRECT NEEDED* [2007-10-29 17:22:04] bbbbbbbbbbbbbbbbbb 8 *CORRECT NEEDED* [2007-10-29 17:25:04] bbbbbbbbbbbbbbbbbb 9 *CORRECT NEEDED* [2007-10-29 17:30:04] bbbbbbbbbbbbbbbbbb 10 *CORRECT NEEDED* [2007-10-29 17:32:04] bbbbbbbbbbbbbbbbbb 11 *CORRECT NEEDED* [2007-10-29 17:35:04] bbbbbbbbbbbbbbbbbb 12 *CORRECT NEEDED* [2007-10-29 17:40:04] bbbbbbbbbbbbbbbbbb 13 *CORRECT NEEDED* [2007-10-29 17:42:04] bbbbbbbbbbbbbbbbbb 14 *CORRECT NEEDED* [2007-10-29 17:45:04] bbbbbbbbbbbbbbbbbb 15 *CORRECT NEEDED* [2007-10-29 17:50:04] bbbbbbbbbbbbbbbbbb 16 *CORRECT NEEDED* [2007-10-29 17:52:04] bbbbbbbbbbbbbbbbbb 17 *CORRECT NEEDED* [2007-10-29 17:55:04] bbbbbbbbbbbbbbbbbb 18 *CORRECT NEEDED* [2007-10-29 18:00:04] bbbbbbbbbbbbbbbbbb 1 *CORRECT NEEDED* [2007-10-29 18:02:04] bbbbbbbbbbbbbbbbbb 2 *CORRECT NEEDED* [2007-10-29 18:05:04] bbbbbbbbbbbbbbbbbb 3 *CORRECT NEEDED* [2007-10-29 18:10:04] bbbbbbbbbbbbbbbbbb 4 *CORRECT NEEDED* [2007-10-29 18:12:04] bbbbbbbbbbbbbbbbbb 5 *CORRECT NEEDED* [2007-10-29 18:15:04] bbbbbbbbbbbbbbbbbb 6 *CORRECT NEEDED* [2007-10-29 18:20:04] bbbbbbbbbbbbbbbbbb 7 *CORRECT NEEDED* [2007-10-29 18:22:04] bbbbbbbbbbbbbbbbbb 8 *CORRECT NEEDED* [2007-10-29 18:25:04] bbbbbbbbbbbbbbbbbb 9 *CORRECT NEEDED* [2007-10-29 18:30:04] bbbbbbbbbbbbbbbbbb 10 *CORRECT NEEDED* [2007-10-29 18:32:04] bbbbbbbbbbbbbbbbbb 11 *CORRECT NEEDED* [2007-10-29 18:35:04] bbbbbbbbbbbbbbbbbb 12 *CORRECT NEEDED* [2007-10-29 18:40:04] bbbbbbbbbbbbbbbbbb 13 *CORRECT NEEDED* [2007-10-29 18:42:04] bbbbbbbbbbbbbbbbbb 14 *CORRECT NEEDED* [2007-10-29 18:45:04] bbbbbbbbbbbbbbbbbb 15 *CORRECT NEEDED* [2007-10-29 18:50:04] bbbbbbbbbbbbbbbbbb 16 *CORRECT NEEDED* [2007-10-29 18:52:04] bbbbbbbbbbbbbbbbbb 17 *CORRECT NEEDED* [2007-10-29 18:55:04] bbbbbbbbbbbbbbbbbb 18 cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs %
실제 쉘 스크립트
cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cbdsm1@server1:~/wl81/test/cbdsm1_a/logs % cat test.sh #!/bin/ksh #FILENAME=`ls -lrt | grep "nohup.out*" | tail -1 | awk '{print $9}'` FILENAME=$1 DATE=`date +%Y-%m-%d` NOWDATE=`date +%Y-%m-%d\ %H:%M:%S` NOWDATE2=`date +%Y-%m-%d\ %H:` BEFORETIME=`./time.pl -1 | awk '{print $4}'` TIME=`./time.pl -1 | awk '{print $4}' | cut -c 1-3` TIME1=`./time.pl -1 | awk '{print $4}' | cut -c 4` TIME2=`./time.pl | awk '{print $4}' | cut -c 4` TIME_1H_AGO=`./time_1h.pl -1 | awk '{print $4}' | cut -c 1-3` DRAWTIME1=`./time.pl | awk '{print $4}' | cut -c 1-2` DRAWTIME2=`./time.pl -1 | awk '{print $4}' | cut -c 1-2` if [ $DRAWTIME2 -eq $DRAWTIME2 ]; then if [ $TIME2 -eq 0 ]; then echo "#################### RESULT 매시 01~09 분 에만 수행됨 ######################" cat $FILENAME | grep "${DATE}" | grep "*CORRECT NEEDED*" | egrep '(${TIME_1H_AGO}4[0-9]|${TIME_1H_AGO}5[0-9])' elif [ $TIME2 -eq 2 ]; then echo "" echo "Time is - $NOWDATE" echo "20 Min before Time is - $BEFORETIME" echo "" echo "#################### RESULT 매시 20~29 분 에만 수행됨 ######################" cat $FILENAME | grep "${DATE}" | grep "*CORRECT NEEDED*" | egrep '(${NOWDATE2}0[0-9]|${NOWDATE2}1[0-9])' echo "" elif [ $TIME2 -eq 4 ]; then echo "" echo "Time is - $NOWDATE" echo "20 Min before Time is - $BEFORETIME" echo "" echo "#################### RESULT 매시 40~49 분 에만 수행됨 ######################" cat $FILENAME | grep "${DATE}" | grep "*CORRECT NEEDED*" | egrep '(${NOWDATE2}2[0-9]|${NOWDATE2}3[0-9])' echo "" fi fi cbdsm1@server1:~/wl81/test/cbdsm1_a/logs %
Forums:
실행형식은..
./test.sh test.txt 입니다. 나중에 테스트가 완료되면 test.txt 는 실제 서치할 로그파일로 대체되겠죠
실행시킬 명령을 파일로 저장한 다음
실행시킬 명령을 파일로 저장한 다음에 그 파일을 실행시키는 방법은 어떠신가요?
#!/bin/ksh
SCRIPT=/tmp/ansgab.sh
FILENAME=/var/adm/syslog/syslog.log
DATE="'Oct 29'"
CMD=cat" "$FILENAME" | grep "$DATE
echo $CMD > $SCRIPT
sh $SCRIPT
bash쉘에서 single
bash쉘에서 single quote를 쓰면서 variable을 쓰고 싶을때는
grep '앞부분'"$변수"'뒷부분'
형식으로 사용하면 됩니다.
단.. bash쉘밖에 안써봐서..
질문하신 내용과 상관없는 답이지만,
date --date='1 hours ago'
따위 명령으로 간단하게 시간을 가져올 수 있습니다.
放下着-----
내려놓으려는 마음도 내려놓기
放下着-----
내려놓으려는 마음도 내려놓기
댓글 달기