Joh*_*Gr. 13 command-line less
搜索类似tail或less这样的程序,它可以让我查看没有包含特定字符串的行的日志。例如,在没有 UFW ( [UFW BLOCK]) 条目行的情况下查看我的系统日志。
Arr*_*cal 13
模式匹配反转选项-v为grep是真正有用的是:
grep -v 'UFW BLOCK' /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
这将显示所有不包含UFW BLOCK. 由于grep默认情况下使用基本的正则表达式,括号列入将使搜索任何“UFW BLOCK”的单个字符,包括空间。你可能最终没有输出。如果您需要确保字符串周围有括号,请对它们进行转义\[UFW BLOCK\],或使用仅包含固定字符串的-F选项grep(感谢Zanna和Steeldriver 对此的建议):
grep -Fv '[UFW BLOCK]' /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
您可以通过将输出管道传输到寻呼机来更轻松地查看,例如less:
grep -v 'UFW BLOCK' /var/log/syslog | less
Run Code Online (Sandbox Code Playgroud)
或者将输出重定向到您的主目录中的文件以供以后查看:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
Run Code Online (Sandbox Code Playgroud)
您还可以使用sed'sd命令从流中删除具有模式的行:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
我们[]通常转义它们表示一个字符类,意思是“匹配这里的任何内容”
您可以使用任何具有编辑功能的工具。您已经获得了使用grep和 的解决方案sed,这里有一些其他选择。所有这些都可以很容易地通过管道传输到less或more其他任何东西。
珀尔
perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
由于这是 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
Run Code Online (Sandbox Code Playgroud)awk
awk '!/\[UFW BLOCK\]/' file
Run Code Online (Sandbox Code Playgroud)使用less命令的&选项,可以过滤掉以仅显示所需的匹配模式,如下所示,
& /PATTERN/
Run Code Online (Sandbox Code Playgroud)
在您的情况下,如果您希望过滤器行UFW BLOCK不显示在输出中,您可以简单地使用&!如下:
&! /UFW BLOCK/
Run Code Online (Sandbox Code Playgroud)