쉘 스크립트는 파일에서 여러 패턴을 검색하고 해당 패턴과 3개 이상의 조건을 일치시킵니다.

쉘 스크립트는 파일에서 여러 패턴을 검색하고 해당 패턴과 3개 이상의 조건을 일치시킵니다.

몇 가지 조건을 수행했지만 파일에서 3개 이상의 조건을 확인하기 위한 정확한 구문을 얻을 수 없습니다.

파일에서 여러 grep을 수행할 수 있지만 조건이 있는 3가지 패턴을 추가할 수는 없습니다. 아래와 같습니다.

CASE/Loop/if-else(사다리 구문)를 제공할 수 있습니다. 저는 단지 사용자가 이 스크립트를 실행할 때 사용자에게 친숙한 메시지를 인쇄하고 싶을 뿐입니다. start.log 파일에 있는 패턴 대신에 이러한 사용자 친화적인 메시지는 Startup.log에서 어떤 패턴이 발견되는지에 따라 달라집니다.

내가 start.log에서 위 명령을 실행할 때 pid가 이미 존재한다는 것을 발견하고 다음과 같이 echo "DB services 이미 실행 중"을 인쇄하고 싶다고 가정해 보겠습니다.

pg_ctl -D $PGDATA start > startup.log

if [$? -eq 0]

then
#if db services is stopped priviously, then it will start and grep below msg to user 
ls -t postgresql*.log | head -n1 | args grep "Database for read only connections"

else 

  elif  grep 'word1\|word2\|word3' startup.log
   then  
#if above word1 exists in file it should print below msg
  echo "hello"
  else 

#if word2 is present in file it shhould print below msg
    
         echo " world"

#   and one more contion i want to add like below

#if word3 is exists in the file it should below msg

   echo "postgresql"

구문을 시도했지만 이해할 수 없었기 때문에 간단한 예 1개를 제공해 주시면 정말 감사하겠습니다.

답변1

문제에 대한 설명을 기반으로 파일에서 다른 패턴이 발견되면 다른 작업을 수행하려고 합니다. 이를 위해서는 다양한 확인이 필요합니다.

if grep -q word1 startup.log; then
echo "Message 1"
elif grep -q word2 startup.log; then
echo "Message 2"
elif grep -q word3 startup.log; then
echo "Message 3"
else
echo "Message 4"
fi

grep -q파일이 일치하는지 자동으로 확인합니다. 일치하는 각 패턴에 대해 표시할 해당 메시지를 추가할 수 있습니다.

위의 논리는 단일 메시지만 표시합니다. 파일에 여러 패턴이 있는 경우 if-elif 체인의 이전에 지정된 패턴이 우선합니다.

각 패턴을 독립적으로 확인하려면 별도의 if블록을 사용할 수 있습니다.

if grep -q word1 startup.log; then
echo "Message 1"
fi

if grep -q word2 startup.log; then
echo "Message 2"
fi

답변2

파일에서 여러 패턴이 발견되거나 패턴의 여러 인스턴스가 발견된 경우 수행할 작업을 설명하지 않았습니다. 다음 쉘 코드는 발견된 경우 일부/모두를 처리하기 위해 루프로 작성되었습니다.

for word in $(grep -oE "word1|word2|word3" startup.log ); do
  case "$word" in
    word1) echo "hello" ;;
    word2) echo "world" ;;
    word3) echo "postgresql" ;;
  esac
done

그렙 옵션:

  • -Eword1|word2확장 정규식 사용( 대신 사용할 수 있음 word1\|word2)
  • -o산출오직전체 줄이 아닌 줄의 일치하는 부분(예: word1, word2 또는 word3)

관련 정보