Answers:
模式匹配反转选项-v
为grep
是真正有用的是:
grep -v 'UFW BLOCK' /var/log/syslog
这将显示所有不包含的行UFW BLOCK
。由于grep
默认情况下使用基本正则表达式,方括号的包含将使其搜索“ UFW BLOCK”的任何单个字符(包括空格)。您可能最终将没有输出。如果您需要确保字符串周围有括号,请转义它们\[UFW BLOCK\]
,或使用-F
选项grep
仅包含固定的字符串(感谢Zanna和Steeldriver的建议):
grep -Fv '[UFW BLOCK]' /var/log/syslog
您可以通过将输出通过管道传送到寻呼机来简化查看过程less
:
grep -v 'UFW BLOCK' /var/log/syslog | less
或者将输出重定向到主目录中的文件以供以后查看:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
fgrep
等效于的命令grep -F
。
您可以使用任何具有编辑功能的工具。您已经使用grep
和获得了解决方案sed
,这里还有其他一些选择。所有这些都可以轻松地通过管道传输到less
或more
其他任何管道上。
佩尔
perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
因为这是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
awk
awk '!/\[UFW BLOCK\]/' file
您也可以使用awk
:
awk '!/PATTERN/' log
当我拥有多个“模式”并且不想使用两个grep
类似的模式时,我会使用它:
... | grep -v foo | grep -v bar
语法是:
awk '!/PATTERN/ && !/PATTERN2/' log
grep -Ev "foo|bar"
。
-e
用来定义多个模式。grep -v -e 'foo' -e 'bar'
less
提供了在正则表达式模式之后过滤显示行的可能性。您可以&
通过在模式后面键入来使用此功能,也可以通过&
单独键入来还原它。