如何在比赛前查找单词

如何在比赛前查找单词

我有以下日志文​​件。我需要知道使用 shell 脚本是否存在任何错误/可疑情况。

我需要找错并检查前面的单词,如果它大于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 shell 中尝试了以下命令,并且运行良好。

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,})将匹配大于零的单个数字,或任何具有两位或更多位的数字。

该模式(faults|suspect)将匹配字符串faultssuspect。如果您也想包含checks在那里,只需使用(faults|suspect|checks).

-q关闭grep实用程序本来会产生的任何输出非错误输出的选项(我们只对 的退出状态感兴趣,grep即它是否能够匹配模式)。

-w选项使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

相关内容