正则表达式 - 如何排除单词

时间:2014-08-12 03:42:44

标签: regex grep

我尝试使用正则表达式匹配和排除特定单词。我基本上试图在24小时内匹配所有字符串,并选择am或pm。但是,我想排除从2014年或2013年开始的字符串。例如:

输入:

11 45 pm
12 34 am
1230pm
2013pm
12 pm 
12p
2014 pm

期望的输出:

11 45 pm
12 34 am
1230pm
12 pm 

我想只使用一个正则表达式来匹配它。我知道如何用两个正则表达式完成这项任务。

我使用以下命令:

grep -E '^(?!2014)(?!2013)([01]?[0-9]|2[0-3])( )?[0-5][0-9]?\s?(am|pm)?' output.txt

没有成功。有什么建议?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下模式:

^((?:0?[0-9]|1[012])\s?(?:[0-5][0-9])?\s?[ap]m)

在此,我假设语句末尾有ampm

答案 1 :(得分:0)

这也有效:

[0-9]{1,2}\s*[0-9]{1,2}(?<!2013)(?<!2014)\s*(am|pm)