【问题标题】:How to exclude lines with regexp如何使用正则表达式排除行
【发布时间】:2013-09-13 12:03:26
【问题描述】:

我有一个带有数字的行列表。需要排除所有以373开头的行。

例如我的清单是:

37322433151
37323175491
19376717186
79684480273
97246000252
37323175491
37323175491
40745108277

如果我做cat ... | egrep '^[^373].*',那么它会排除从37 开始的行,输出是

19376717186
97246000252
40745108277

即使表达式是^[^(373)].*

仅当行以373 开头时,我才需要排除。谁能告诉我应该用什么表达方式?

我也试过'^(?!373).*

【问题讨论】:

  • 对于前瞻选项,请阅读this

标签: regex grep


【解决方案1】:

如果您想使用正则表达式,那么您可以尝试:

^(37[^3]|3[^7]|[^3])[0-9]+$

【讨论】:

  • @ЕгорГрижук 不客气。如果这解决了您的问题,那么请接受答案。
【解决方案2】:

使用grep -v

grep -v "^373" file

使用 awk:

awk '!/^373/' file

使用grep -P (PCRE):负前瞻

grep -P '^(?!373)' file

【讨论】:

  • 忍者 13 秒
  • @Foon: 大声笑 :) 想知道为什么 5 分钟没有明显的答案,然后 2 在 13 秒内到达。
  • 是的,但这不是解决方案,正则表达式不会与 grep 一起使用,它将用于计费,以匹配数字。需要一个正则表达式,排除,而不是 grep 中的键
  • 不确定regexp will not be used with grep, it will be used in billing 是什么意思。您不需要 grep 解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多