두 로그 날짜 사이의 sed 명령

두 로그 날짜 사이의 sed 명령

나는 "error"라는 단어가 포함된 어제와 오늘 사이의 로그 파일만 보고 존재하는 경우 간단한 Y/N을 반환하기 위해 다음 sed 줄을 작성했습니다.

나는 실제로 나에게 필요한 적절한 수익을 제공하지 않았습니다. 누군가 내가 무엇이 잘못되었는지 지적하도록 도와줄 수 있습니까?

 today="$(date +%Y-%m-%d)"
 yesterday="$(date -d '24 hour ago' +%Y-%m-%d)"
    iserror="$(if [ sed -n "/"$yesterday"/,/"$today"/p" /mnt/data/systemlogs/logstash/logs/pipeline.log | grep "ERROR" ] = ""  ; then
    echo "No"
 else
    echo "Yes"
 fi;
)"

답변1

여기서 구문이 잘못되었습니다.

iserror="$(if [ sed -n "/"$yesterday"/,/"$today"/p" pipeline.log | grep "ERROR" ] = ""  ; then
    echo "No"
 else
    echo "Yes"
 fi;
)"

이 구문의 구문은 if [ ]입니다 if [ condition ]. 외부에 if [ command ] condition있으므로 = ""이미 가 있습니다 [ ]. 이 코드를 실행하면 일부 구문 오류가 발생합니다.

$ iserror="$(if [ sed -n "/"$yesterday"/,/"$today"/p" pipeline.log | grep "ERROR" ] = ""  ; then
     echo "No"
  else
     echo "Yes"
  fi;
 )"
bash: [: missing `]'
grep: ]: No such file or directory
grep: =: No such file or directory
grep: : No such file or directory

당신이 시도하는 것은 다음과 같습니다

iserror="$(if [ $(sed -n "/"$yesterday"/,/"$today"/p" pipeline.log | grep "ERROR") = "" ] ; then
    echo "No"
 else
    echo "Yes"
 fi;
)"

하지만 그것도 좋지 않습니다. grep아무것도 반환되지 않으면 매개변수가 손실되고 다른 오류가 발생하기 때문입니다.

$ iserror="$(if [ $(sed -n "/"$yesterday"/,/"$today"/p" pipeline.log | grep "bERROR") = "" ] ; then
    echo "No"
 else
    echo "Yes"
 fi;
)"
bash: [: =: unary operator expected

대신, grep -c이를 사용하여 항상 숫자를 반환하고, 일치하는 항목이 없으면 0을 반환하고, 일치하는 항목이 있으면 일치하는 항목 수를 반환할 수 있습니다.

iserror="$(if [ $(sed -n "/"$yesterday"/,/"$today"/p" pipeline.log | grep -c "ERROR") -eq 0 ] ; then
    echo "No"
 else
    echo "Yes"
 fi;
)"

또는 더 간단하게 사용하면 grep -q출력이 생성되지 않지만 무언가가 발견되면 성공적으로 종료되고 아무것도 발견되지 않으면 실패합니다.

iserror="$(sed -n "/"$yesterday"/,/"$today"/p" pipeline.log | 
        grep -q "ERROR" && 
            echo Yes || 
                echo No)"

그건 그렇고, 이것을 더 많이 활용하고 sed관련 행에 일치하는 항목만 인쇄할 수도 있습니다.ERROR

iserror="$(if [ $(sed -n '/2022-10-26/,/2022-10-27/{ /ERROR/p }' pipeline.log | wc -l) -gt 0 ]; then 
    echo Yes; 
else 
    echo No; 
fi) "

관련 정보