请建议如何匹配仅在“]”char之后出现的ERROR字符串 通过awk或sed
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
我的目标是计算仅在日志文件中的“]”字符后出现的所有ERROR单词
备注 - “]”和ERROR之间必须是一个或多个空格
答案 0 :(得分:4)
那么你不需要像awk这样的核头,甚至是perl。 grep为你这样做:我的目标是计算仅在“]之后出现的所有ERROR字词 日志文件中的字符
备注 - “]”和ERROR之间必须是一个或多个空格
grep -Pc ']\s+ERROR' yourLogFile
小测试:
kent$ echo "[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found "|grep -Pc ']\s+ERROR'
1
答案 1 :(得分:0)
awk -F"] " '/ERROR/{print $2}' inputfile
[jaypal:~] echo "[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found " | awk -F"] " '/ERROR/{print $2}'
ERROR file /etc/ghy.txt not found
perl -pe 's/.*(?<=] )(.*)/$1/' inputfile
echo "[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found " | perl -pe 's/.*(?<=] )(.*)/$1/'
ERROR file /etc/ghy.txt not found
[jaypal:~/Temp] cat file
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[Mon Jan 30 21:14:01 IST 2012] ERROR file /etc/ghy.txt not found
[jaypal:~/Temp] awk -F"] " '/ERROR/{a[NR]=$2}END{print "count is " length(a)}' file
count is 9
答案 2 :(得分:0)
这是一个仅限shell的片段,它应该比使用任何外部程序(对于小文件读取)更快,因为它只使用shell内置函数。它可以被修改为在守护进程模式下运行时逐个处理错误(通过将日志文件拖到fifo而不是直接读取它并修改case条件)
不是echo的预期用途,但它 将空格/制表符减少到1个空格
FILE="logfile"
ERRORS=0
while read LINE || [ "$LINE" ]; do
case "`echo $LINE`" in
*\]" "ERROR*)ERRORS=$(($ERRORS+1));;
esac
done < "${FILE}"
echo $ERRORS
答案 3 :(得分:0)
这可能对您有用:
grep -c '\] \+ERROR' file
或
grep -c '\][[:space:]]\+ERROR' file
或者
sed '/\]\s\+ERROR/!d' file | wc -l
答案 4 :(得分:-1)
你可以做到
sed -n '/] ERROR/p' infile