如果发现字符串出现次数,则过滤行?

如果发现字符串出现次数,则过滤行?

如果行包含以下内容,则需要过滤并显示日志行正好 2 个逗号,并且不包含特定字符串。我需要使用哪个 Linux 命令,,,awk表达式grep是什么?

对于第二个条件我使用这个:

awk '!/specificstring/' ./log/file/path

两个逗号检查我不知道如何输入。通常行是这样的两行:

arbitrary,arbitrary,arbitrary,arbitrary
arbitrary,arbitrary,arbitrary

需要第二种线。

尝试过这样的事情:

grep -P '[^,]+[,][^,]+[,][^,]+[,]"specificstring"[^,]+' ./log/file/path

如何排除“specificstring”?

答案1

我建议:

grep '^[^,]*,[^,]*,[^,]*$' file | grep -v 'specificstring'

答案2

awk这可以通过结合两个条件一次性完成:

awk '/^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path

perl使用几乎相同的命令可以实现相同的效果:

perl -lane 'print if /^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path

以更一般的意义来回答这个问题,即如果发现任意数量的字符串出现,则过滤行

perl -lane '@m = /,/g; print if scalar @m == 2 and !/specificstring/' ./log/file/path

相关内容