
다음 로그 파일이 있습니다. 쉘 스크립트를 사용하여 결함/의심스러운 조건이 있는지 알아야 합니다.
결함을 찾아 이전 단어를 확인해야 합니다. 0보다 크면 DBA가 해야 할 일이 있는 것입니다.
Checking pubs2: Logical pagesize is 4096 bytes
DBCC CHECKSTORAGE for database 'pubs2' sequence 17 completed at Oct 21 2015 3:17PM. 4 faults and 0 suspect conditions were located. 0 checks were aborted. You should investigate the recorded faults, and plan a course of action that will correct them.
이미 Linux/Bash 셸에서 다음 명령을 시도했는데 잘 작동하고 있습니다.
FLTCNT=`cat $MAILLOG | grep -oP '\S+(?=\s+faults and)'`
SPTCNT=`cat $MAILLOG | grep -oP '\S+(?=\s+suspect)'`
if [ $FLTCNT -gt 0 ] || [ $SPTCNT -gt 0 ] ; then
FAILED="Y"
# echo "Fault / suspect conditions found"
cat $MAILLOG >> $ERRLOG
fi
하지만 AIX 서버에서 동일한 작업을 실행하면 오류가 발생합니다.
grep: illegal option -- o
grep: illegal option -- P
usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
[-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
-f pattern_file... [file...]
답변1
X faults
두 문자열 중 하나 와 Y suspect
양의 정수 값 중 하나 X
가 Y
파일 0
에 존재하는 경우 뭔가를 하고 싶다고 가정합니다 $MAILLOG
.
if grep -qwE '([1-9]|[0-9]{2,}) (faults|suspect)' "$MAILLOG"; then
# do something
fi
패턴은 ([1-9]|[0-9]{2,})
0보다 큰 한 자리 숫자 또는 두 자리 이상의 숫자와 일치합니다.
패턴은 (faults|suspect)
문자열 faults
또는 suspect
. checks
거기에도 포함하고 싶으시면 를 사용하세요 (faults|suspect|checks)
.
유틸리티가 생성하는 오류가 아닌 출력을 끄는 -q
옵션입니다 ( 우리는 의 종료 상태 , 즉 패턴과 일치할 수 있는지 여부에만 관심이 있습니다).grep
grep
옵션은 "단어 검색"을 수행합니다 -w
. 이 경우 0이 새 "단어"를 시작하지 않고 시작 하므로 하위 문자열이 아닌 grep
찾을 것임을 의미합니다 . 이는 또한 문자열 (그럴 가능성은 없지만)이 일치를 트리거하지 않는다는 것을 의미합니다.10 faults
0 faults
10
1
2 faultsmen
-E
대체( )를 사용하여 확장 정규식을 지원하려면 가 필요 합니다 |
.
답변2
grep을 사용해 볼 수 있습니다.
grep -c "your word to match" /log/file
예:
$ grep -c "upgraded" /var/log/pacman.log
244