Câu trả lời:
Tùy chọn đảo ngược mẫu -vcho grepthực sự hữu ích cho việc này:
grep -v 'UFW BLOCK' /var/log/syslog
Điều này sẽ cho bạn thấy tất cả các dòng không chứa UFW BLOCK. Vì grepsử dụng các biểu thức chính quy cơ bản theo mặc định, việc bao gồm các dấu ngoặc sẽ làm cho nó tìm kiếm bất kỳ ký tự riêng lẻ nào của 'UFW BLOCK' bao gồm cả khoảng trắng. Có lẽ bạn sẽ không có đầu ra. Nếu bạn cần đảm bảo rằng có các dấu ngoặc quanh chuỗi, hãy thoát chúng \[UFW BLOCK\]hoặc sử dụng -Ftùy chọn grepchỉ bao gồm các chuỗi cố định (Cảm ơn Zanna và Steeldo về lời khuyên về điều này):
grep -Fv '[UFW BLOCK]' /var/log/syslog
Bạn có thể làm cho việc xem dễ dàng hơn bằng cách chuyển đầu ra tới máy nhắn tin như less:
grep -v 'UFW BLOCK' /var/log/syslog | less
Hoặc chuyển hướng đầu ra đến một tệp trong thư mục chính của bạn để xem sau:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
fgreplệnh tương đương với grep -F.
Bạn có thể sử dụng bất kỳ công cụ có khả năng chỉnh sửa. Bạn đã được đưa ra giải pháp bằng cách sử dụng grepvà sed, đây là một vài lựa chọn khác. Tất cả những có thể dễ dàng được đường ống để lesshoặc morehoặc bất cứ điều gì khác.
Perl
perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
Vì đây là Perl, TIMTOWDI! .
perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
ôi
awk '!/\[UFW BLOCK\]/' file
Bạn cũng có thể sử dụng awk:
awk '!/PATTERN/' log
Tôi sử dụng nó khi tôi có nhiều hơn một "mẫu" và tôi không muốn sử dụng hai grepkiểu như:
... | grep -v foo | grep -v bar
cú pháp là:
awk '!/PATTERN/ && !/PATTERN2/' log
grep -Ev "foo|bar"?
-eđể xác định nhiều mẫu. grep -v -e 'foo' -e 'bar'
lesscung cấp khả năng lọc các dòng được hiển thị sau một mẫu biểu thức chính quy. Bạn có thể sử dụng tính năng này bằng cách gõ&theo mẫu và bạn có thể hoàn nguyên nó bằng cách gõ&một mình.