grep 提取数字范围

grep 提取数字范围

我正在 grep 日期2019-09-XX2019-10-XX但不知怎的,我的 grep 没有帮助,我确信我在这里遗漏了一些东西

  Last Password Change: 2019-10-30
  Last Password Change: 2017-02-07
  Last Password Change: 2019-10-29
  Last Password Change: 2019-11-03
  Last Password Change: 2019-10-31
  Last Password Change: 2018-09-27
  Last Password Change: 2018-09-27
  Last Password Change: 2019-06-27

我正在执行以下操作,但它不起作用

grep "2019\-[09,10]\-" file 也尝试过grep "2019\-{09,10}\-" file

答案1

您希望“替代”正则表达式标记|表示“要么这个或那个”:

grep -E '2019-(09|10)-' file

为什么我的正则表达式在 X 中有效但在 Y 中无效?有关正则表达式标记和正则表达式类(基本、扩展等)的一些背景。

答案2

grep不擅长处理数字,它不知道如何进行算术比较。为此,您可能需要使用 awk 或 Perl 之类的东西。这在这里并不是很重要,因为很容易列出0910,但如果你的范围是从 97 到 123 ,那就更糟糕了。

例如,这将选择年、月和日作为数字,并打印出日期在 27 到 31 之间的行:

perl -ne 'print if /Last Password Change: ([0-9]+)-([0-9]+)-([0-9]+)/ && $3 >= 27 && $3 <= 31' < file

正则表达式主要类似于 grep ERE,括号将相应部分捕获到变量$1$2等中$3

答案3

只是添加一个替代方案:

grep -e "2019-10-.." -e "2019-09-.." file

相关内容