살려주세요~ 퇴근하고 싶어요 ㅠㅠ egrep 내에서 $변수를 사용할때 에러

help@osori.org의 이미지

안녕하세요 쉘스크립트를 짜던도중 에러에 막려 질문을 올립니다.

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 % 

help@osori.org의 이미지

./test.sh test.txt 입니다. 나중에 테스트가 완료되면 test.txt 는 실제 서치할 로그파일로 대체되겠죠

notepad의 이미지

실행시킬 명령을 파일로 저장한 다음에 그 파일을 실행시키는 방법은 어떠신가요?

#!/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

pung96의 이미지

bash쉘에서 single quote를 쓰면서 variable을 쓰고 싶을때는

grep '앞부분'"$변수"'뒷부분'

형식으로 사용하면 됩니다.

단.. bash쉘밖에 안써봐서..

윤봉환의 이미지

date --date='1 hours ago'

따위 명령으로 간단하게 시간을 가져올 수 있습니다.

放下着-----
내려놓으려는 마음도 내려놓기

放下着-----
내려놓으려는 마음도 내려놓기

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.