对于大型日志文件,如何显示没有“成功”或未以“确定”终止的那些行?
答案1
删除包含以下内容的行任何一个字符串,特别是 grep:
根据乔丹的评论,在一个命令中:
grep -Ev 'success|ok$'
或者:
grep -ve success -e 'ok$'
或者:
grep -v 'success ok$'
在两个命令中:
grep -v success file | grep -v 'ok$'
例子:
$ cat file
success something else
success ok
just something else
$ grep -Ev 'success|ok$'
just something else
$ grep -v success file | grep -v 'ok$'
just something else
删除包含以下内容的行两个都字符串,特别是 grep:
grep -v 'success.*ok$' file
例子:
$ cat file
success something else
success ok
just something else
$ grep -v 'success.*ok$' file
success something else
just something else
答案2
我会尝试 awk
awk '/success/ { next ; } /ok$/ { next ; } { print ;}' file
在哪里
/success/ { next ; }
查找单词success
并跳行/ok$/ { next ; }
查找小写字母ok
并跳行{ print ;}
隐式 else : 打印行
根据建议
短 awk (感谢 Stéphane Chazelas )
awk '!/success/ && !/ok$/'
这基本上不是(成功)也不是(行尾确定)
打高尔夫球 awk (感谢 cas )
awk '! /success|ok$/'
它重用正则表达式,并否定它
答案3
添加到上面的 grep -Ev 命令:您可以使用egrep -v 'success|ok$' filename
答案4
由于提到了 awk,另一种选择是 sed:
sed '/success/d;/ok$/d' file
sed -e '/success/d' -e '/ok$/d' file
或(较新的 sed 和未来的 POSIX)感谢 Stéphane Chazelas
sed -E '/success|ok$/d' file