살려주세요~ 퇴근하고 싶어요 ㅠㅠ 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'
따위 명령으로 간단하게 시간을 가져올 수 있습니다.
放下着-----
내려놓으려는 마음도 내려놓기
放下着-----
내려놓으려는 마음도 내려놓기
댓글 달기