grep里面少?

for*_*are 81 less grep bash logs

我目前正在筛选许多不熟悉的日志以寻找一些问题。我查看的第一个文件是 Events.log,我得到了至少三个页面,less其中似乎在不同时间显示相同的事件 - 一个看起来相当温和的事件。我想过滤掉这个事件,目前我退出less并做一些类似的事情

grep -v "event text" Events.log | less
Run Code Online (Sandbox Code Playgroud)

这现在带来了一些我也想过滤掉的其他常见的、无趣的事件。有没有一种方法可以让我grep -v 里面less?而不是必须做

egrep -v "event text|something else|the other thing|foo|bar" Events.log | less
Run Code Online (Sandbox Code Playgroud)

在查看任何类型的日志文件时,它给我的印象是一个有用的功能——如果less不是这个工具,是否还有另一个具有我所寻求的品质?只是一个less内置grep.

ori*_*ion 129

less有非常强大的模式匹配。从手册页

&pattern

    只显示匹配的行patternpattern 不显示不匹配的行。如果pattern为空(如果您&立即键入后跟ENTER),则关闭任何过滤,并显示所有行。当过滤生效时,提示开头会显示一个与号,以提醒文件中的某些行可能被隐藏。

    某些字符在/命令† 中很特殊:

    ^N 或者 !

      只显示不匹配的行pattern
    ^R
      不要解释正则表达式元字符;也就是做一个简单的文字比较。

    ____________
    如果在pattern;开头输入,某些字符是特殊字符。他们修改了搜索的类型,而不是成为pattern.

???(当然^N和分别^R代表Ctrl+NCtrl+ R。)?

因此,例如,&dns将仅显示相匹配的图案线dns,并且&!dns将过滤掉(不包括)那些行,只显示不匹配的图案线条。

/命令的描述中注意到

    pattern是一个正则表达式,由您的系统提供的正则表达式库识别。

所以

  • &eth[01]? 将显示包含eth0或的行eth1
  • &arp.*eth0将显示包含arp后跟的行eth0
  • &arp|dns? 将显示包含arp或的行dns

并且!可以反转上述任何一个。因此,您希望用于问题示例的命令是:

&!event text|something else|the other thing|foo|bar
Run Code Online (Sandbox Code Playgroud)

还可以使用和 进行搜索(和/转到下一个/上一个)。/pattern?patternnN


G-M*_*ca' 10

orion 的回答为基础less(1)手册页描述了

/pattern

    向前查找该文件中ñ含有n行patternň默认为 1。这pattern是一个正则表达式,由您的系统提供的正则表达式库识别。搜索从显示的第二行开始(但请参阅-a-j选项,它们改变了这一点)。

    如果在pattern;开头输入某些字符是特殊的 他们修改搜索类型,而不是成为以下内容的一部分pattern

    ^N 或者 !

      搜索不匹配的行pattern
    ^E 或者 *
      搜索多个文件。也就是说,如果搜索到当前文件的 END 没有找到匹配项,则在命令行列表中的下一个文件中继续搜索。
    ^F 或者 @
      从命令行列表中第一个文件的第一行开始搜索,而不管当前屏幕上显示的内容-a或 或-j选项的设置。
    ^K
      突出显示与pattern当前屏幕上匹配的任何文本,但不要移动到第一个匹配项(保持当前位置)。
    ^R
      不要解释正则表达式元字符;也就是做一个简单的文字比较。

    ____________
    命令前面可能有一个十进制数,在描述中称为N

???(当然^Nand^E等,代表 Ctrl+NCtrl+E等)?

事实证明, 并且工作得很好。例如,命令&pattern/pattern

  • &!arp|dnsEnter
  • /Ctrl+Kfail|fatal|fault|sd[a-z][0-9]Enter

以任何顺序输入,将隐藏(排除)包含所有行arpdns(像grep -v),然后在剩下的线条,彰显的所有出现failfatalfault或任何看起来像一个SCSI设备的名称(sd[a-z][0-9])。请注意,将不会显示包含arpdns以及fail或任何其他危险词的行。