从日志文件中grep特定模式

时间:2015-07-29 20:09:36

标签: grep

我将所有svn提交日志消息传递给文件,并且只想从中获取JIRA问题编号。 有些行可能有超过1个问题编号,但我想只抓取第一个出现次数。

模式为XXXX-999(alpha和数字char的数量不是常数) 此外,我不希望显示整行,只是JIRA编号,没有重复。我使用以下命令,但它没有工作。

有人可以帮忙吗?

 cat /tmp/jira.txt | grep '^[A-Z]+[-]+[0-9]'

记录文件样本

 ------------------------------------------------------------------------
 r62086 | userx | 2015-05-12 11:12:52 -0600 (Tue, 12 May 2015) | 1 line
 Changed paths:
   M /projects/trunk/gradle.properties
 ABC-1000  This is a sample commit message    
 ------------------------------------------------------------------------
 r62084 | usery | 2015-05-12 11:12:12 -0600 (Tue, 12 May 2015) | 1 line
 Changed paths:
   M /projects/training/package.jar
 EFG-1001  Test commit

预期输出:

ABC-1000
EFG-1001

1 个答案:

答案 0 :(得分:0)

首先,看起来您的第二个+位于错误的位置,它应该位于[0-9]表达式的末尾。

其次,我认为你需要做的就是使用-o选项grep(只显示行的匹配部分),然后通过{{1}管道grep输出},像这样:

sort -u

虽然如果是我,我会跳过cat /tmp/jira.txt | grep -oE '^[A-Z]+-[0-9]+' | sort -u步骤并将文件名设为cat,如下所示:

grep

其中六个,另外六个,真的。