Câu trả lời:
Tùy chọn đảo ngược mẫu -v
cho grep
thự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ì grep
sử 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 -F
tùy chọn grep
chỉ 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
fgrep
lệ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 grep
và 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 để less
hoặc more
hoặ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 grep
kiể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'
less
cung 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.