关于shell:使用grep检查行是否不是以特定字符串开头

Check if a line does not start with a specific string with grep

本问题已经有最佳答案,请猛点这里访问。

我有一个文件app.log

1
2
3
4
5
6
7
8
9
10
11
12
Oct 06 03:51:43 test test
Nov 06 15:04:53 text text text
more text more text
Nov 06 15:06:43 text text text
Nov 06 15:07:33
more text more text
Nov 06 15:14:23  test test
more text more text
some more text
Nothing but text
some extra text
Nov 06 15:34:31 test test test

如何grep并非以11月6日开始的所有行?

我尝试了

1
grep -En"^[^Nov 06]" app.log

我无法获得其中包含06的行。


只需使用以下grep命令,

1
grep -v '^Nov 06' file

来自grep --help

1
-v, --invert-match        select non-matching lines

通过正则表达式的另一种攻击,

1
grep -P '^(?!Nov 06)' file

正则表达式说明:

  • ^断言我们处于起步阶段。
  • (?!Nov 06)这个否定的前瞻断言在行首之后没有字符串Nov 06。如果是,则匹配每行中第一个字符之前的边界。

通过PCRE动词(*SKIP)(*F)

的另一种基于正则表达式的解决方案

1
grep -P '^Nov 06(*SKIP)(*F)|^' file