【问题标题】:grep specific pattern from a log file从日志文件中 grep 特定模式
【发布时间】:2015-07-30 05:08:00
【问题描述】:

我正在将我所有的 svn 提交日志消息传递到一个文件,并且只想从中获取 JIRA 问题编号。 有些行可能有多个问题编号,但我只想抓住第一次出现。

模式为 XXXX-999(字母和数字字符的数量不是恒定的) 另外,我不希望显示整行,只显示 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

【问题讨论】:

  • 你能举一两个你想匹配的行的例子吗?
  • 我已编辑查询。它看起来比评论更好。谢谢。

标签: grep


【解决方案1】:

首先,你的第二个+好像放错了地方,应该在[0-9]表达式的末尾。

其次,我认为你需要做的就是使用-o grep 选项(只显示该行的匹配部分),然后通过sort -u 管道输出grep,如下所示:

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

如果是我,我会跳过cat 步骤,只需将文件名提供给grep,如下所示:

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

六个一个,六个另一个,真的。

【讨论】:

  • 感谢您的回复。但是,此命令不返回任何内容。我都试过了。
  • @VRK 我忘了在grep 的许多版本中,您需要+-E 选项才能获得其特殊含义。答案已编辑,尝试新命令。
  • 太棒了。这两个命令都很好用。谢谢你的命令和解释得很好。
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2013-06-20
  • 2019-03-11
  • 2012-11-05
相关资源
最近更新 更多