我有一个来自postgresql的日志文件,它具有格式的日志条目;
LOG: execute <unnamed>: /match this here/ DETAIL: parameters: /also want to filter this line/
我认为这可能是可能的
grep -v --after-context=1 'match this here' /my/log/file.log
但它不起作用。 有一些sed / awk / grep的魔术,还是我必须做一些Perl?
据我所知,你不能单独做grep。
awk可以做到这一点非常简单:
awk -v skip=-1 '/match this here/ { skip = 1 } skip-- >= 0 {next } 1' /my/log/file.log
编辑:
我认为你不能通过任何正则expression式匹配第二行,你真的想匹配包含X和行之后的行。 如果你可以匹配一个string,这是很容易的:
egrep -v "match this here|also want to filter this line" /my/log/file.log
另一种使用awk的方法是:
awk '/match this here/ {getline; next} {print}' file.log
您是否打算使用“-v”来防止“匹配此处”显示第一行? “-v”会颠倒你的表情,说“不匹配的显示行匹配这里”。 我现在不是在一个* nix盒子上,但是我想你可以做这样的事情,如果你只想要第二行显示:
grep --after-context=1 'match this here' /my/log/file.log | grep -v '^LOG:' | grep -v '^-'
这应该打印两行,但第二个grep语句应该隐藏以LOG开头的第一行:
试试看,祝你好运。
目前还不完全清楚你想达到什么目的。 如果你想在这里匹配/然后打印下一行
sed -n '/match this here/{n;p}' /my/log/file.log DETAIL: parameters: also want to filter this line
如果您想在此匹配/匹配,然后打印匹配的行和之后的行
sed -n '/: match this here/{p;n;p}' /my/log/file.log LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line
用grep你可以
grep -A 1 'match this here' /my/log/file.log LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line
如果你有多个比赛,每个比赛是由--
grep -A 1 'match this here' /my/log/file.log LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line -- LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line
你可以
grep -A 1 'match this here' /my/log/file.log | grep -v 'match this here'
删除第一行,如果这是你想要的。
日志:执行:/匹配在这里/细节:参数:/也想过滤这一行/
STR ='在此匹配'FILE = / var / log / logfile.log
sed“/ $ STR / {n; d;}”$ FILE | sed / $ STR / d