題 僅按某列過濾/ grep某些輸出?


如何僅按特定列過濾某些輸出?

我需要這樣的東西:

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

所以我想只看到第一列中沒有字符串'200'的行。


4
2017-08-25 07:25


起源




答案:


awk可能是解決這類問題的規範工具。

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

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

13
2017-08-25 07:41



順便說一下,你可以把動作寫成 { print } 甚至完全省略它(只是 awk '$2 != 200'),因為 print $0 是默認操作。 - David Z
謝謝,很高興通過回答別人的問題來學習一些東西。 - Nathan O'Sullivan


這將有效:

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

它排除以“200”開頭,後跟空格或製表符的行。

您可以根據需要選擇不同的分隔符集。

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

它排除以“200”開頭的行,後跟除字母或數字字符以外的任何字符。


0
2017-08-30 01:35