Câu hỏi Lọc / grep một số đầu ra chỉ bằng một số cột?


Làm thế nào tôi có thể lọc một số đầu ra chỉ bằng một số cột nhất định?

Tôi cần một cái gì đó như thế này:

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

Vì vậy, tôi muốn chỉ xem các dòng không có chuỗi '200' trong cột đầu tiên.


4
2017-08-25 07:25


gốc




Các câu trả lời:


awk có lẽ là công cụ kinh điển cho loại vấn đề này.

$ 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



Nhân tiện, bạn có thể viết hành động như { print } hoặc thậm chí bỏ qua nó hoàn toàn awk '$2 != 200'), kể từ print $0 là hành động mặc định. - David Z
Cảm ơn, tốt đẹp để tìm hiểu điều gì đó bằng cách trả lời câu hỏi của người khác. - Nathan O'Sullivan


Điều này sẽ hoạt động:

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

không bao gồm các dòng bắt đầu bằng "200" theo sau là dấu cách hoặc tab.

Bạn có thể chọn các bộ phân cách khác nhau tùy theo nhu cầu của bạn.

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

không bao gồm các dòng bắt đầu bằng "200" theo sau là bất kỳ ký tự nào khác với ký tự chữ cái hoặc số.


0
2017-08-30 01:35