仅根据某一列过滤/grep 一些输出?

仅根据某一列过滤/grep 一些输出?

我如何才能仅根据某一列过滤某些输出?

我需要这样的东西:

tail -f logs/access_log | grep -v "200" --only-in-column=1

所以我只想看到第一列中没有字符串“200”的行。

答案1

awk 可能是解决此类问题的规范工具。

$ cat data
foo 200 bar
foo 200 baz
bar 4   baz

$ cat data | awk '$2 != 200 { print $0 }'
bar 4   baz

答案2

这将起作用:

tail -f logs/access_log | grep -v '^200[[:blank:]]'

排除以“200”开头后跟空格或制表符的行。

您可以根据需要选择不同的分隔符集。

tail -f logs/access_log | grep -v '^200[^[:alnum:]]'

排除以“200”开头并且后跟任何除字母或数字字符之外的字符的行。

相关内容