我正在 grep 日期2019-09-XX
,2019-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 之类的东西。这在这里并不是很重要,因为很容易列出09
和10
,但如果你的范围是从 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