Определенный шаблон grep из файла журнала

Я передаю все свои сообщения журнала фиксации 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

1 ответ

Решение

Во-первых, кажется, у вас есть второй + в неправильном месте, это должно быть в конце [0-9] выражение.

Во-вторых, я думаю, что все, что вам нужно сделать, это использовать -o опцию grep (для отображения только соответствующей части строки), затем передайте grep вывод через sort -u, как это:

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

Шесть из одного, полдюжины другого, правда.

Другие вопросы по тегам