grep -x와 함께 사용하는 방법

grep -x와 함께 사용하는 방법

이것은 내 코드입니다.

if grep -x $idle | grep -x $dead | grep -x $busy ./Event.log
 then 
   echo " Events are running Successfully" >> ./Event.log
 else 
   echo "One or more Events are down. Check the log and restart the Events." >> ./Event.log
fi

다음 오류가 발생합니다.

grep: 0652-033 Cannot open 1.
grep: 0652-033 Cannot open 0.
grep: 0652-033 Cannot open 0.

if조건이 충족 되더라도 else블록에 진입하게 됩니다.

누가 나를 도와줄 수 있나요?

답변1

이 명령 grep에는 두 가지 매개변수가 있습니다.무늬그리고문서. 입력이 파이프나 리디렉션을 통해 표준 입력에 연결된 경우 |이 파일을 생략할 수 있습니다 <. 귀하의 예에서는 그렇지 않으므로 첫 번째 사람은 grep패턴을 찾을 위치를 모릅니다. 다음과 같이 작성해야 합니다.

grep -x $idle Event.log | grep -x $dead | grep -x $busy

두 번째와 세 번째 greps는 파이프에서 읽기 때문에 파일 인수가 필요하지 않습니다.

그러나 귀하의 경우에는 세 가지 대체 문자열을 찾는 것이 더 나을 것 같습니다. 따라서 를 |사용하거나 사용하지 않고 대체 연산자를 사용할 수 있습니다 . 예를 들면 다음과 같습니다.grep -E\|-E

if grep -x "$idle\|$dead\|$busy" ./Event.log >/dev/null
    then
    echo " Events are running Successfully" >> ./Event.log
else
    echo "One or more Events are down. Check the log and restart the Events." >> ./Event.log
fi

답변2

정규식을 인용하고(셸 단어 분리 규칙을 피하기 위해) 옵션을 비활성화하고(정규식의 선행 하이픈이 options 로 처리되는 것을 피하기 위해 grep), 표준 입력이 grep되고 있음을 공식적으로 표시해야 할 수도 있습니다.

$ x="hi there"; (echo hi there; echo bye there) | grep -- "$x" -
hi there

테스트 조건의 결과만 필요한 경우에도 -q옵션이 grep관련될 수 있습니다 .

관련 정보