2017-02-14 14 views
1

Я хотел иметь формат журнала git, который по существу является форматом oneline, но включает электронную почту автора.Каков самый простой способ настроить `git log`, обрезая электронную почту автора на` @ `?

Поскольку я стараюсь сделать формат максимально компактным, в дополнение к использованию короткого хэша, я бы хотел использовать электронную почту автора, усеченную на @.

Прямо сейчас, мой формат:

%h | %<(10,trunc)%ae | %s 

, который дает результат, аналогичный:

2821c992ff | [email protected] | a commit 
e45d9c934b | dev13abc.. | another commit 

Это допустимо, так как автор письма 10 символов максимум до @, но формат адреса электронной почты несколько грязный.

Я ищу самый простой способ укоротить на @, получая выход как:

2821c992ff | dev12 | a commit 
e45d9c934b | dev13abc | another commit 

Решающей концепцию является усечение на @.

Как подтверждение, я использую последний git (2.11.x).

ответ

2

Я думаю, что вам нужно GNU Awk gensub() функцию, чтобы удалить все после @ части из колонны 2,

awk 'BEGIN{FS=OFS="|"}{$2=gensub(/@.*$/," ","g",$2);}1' file 
2821c992ff | dev12.. | a commit 
e45d9c934b | dev13abc.. | another commit 

Или в трубопроводе (|) делать,

.. | awk 'BEGIN{FS=OFS="|"}{$2=gensub(/@.*$/,".. ","g",$2);}1' 

(или) в качестве вы указали в комментариях ниже, если вы не хотите, чтобы часть .. сняла его с замещающей части в gensub() как

.. | awk 'BEGIN{FS=OFS="|"}{$2=gensub(/@.*$/," ","g",$2);}1' 
+0

Если письмо не усечено, я не вижу использования '..'. Кроме того, 'sub (/@.*/,"",$ 2)' достаточно – karakfa

+0

@karakfa: Спасибо за предложение в 'sub()', имел тот же вопрос, если '..' фактически составлял часть столбца значение или просто представление и т. д. Требуется ввод от OP для этого. На данный момент только что предложил op для данного ввода – Inian

+0

«..'не требуется - это необязательно, в том случае, если в git есть способ выполнить замену (которая, на ваш ответ, отсутствует). Поскольку ответ использует инструмент, внешний для git, тогда нет необходимости включать '..'. – Marcus

0

В предположении, что каждый автор электронной почты префикс (часть перед @) составляет не более 10 символов, следующий будет выполнить задание:

git log --pretty='%h | %<(11,trunc)%ae | %s' | perl -pe 's/(@\S+)/" " x length($1)/e' 

Это не представляется возможным (или легко) использовать прямая замена регулярных выражений, потому что простой тип замены /@\S+// приведет к тому, что записи второго столбца будут иметь переменную длину, смещая «таблицу».

Вышеупомянутая команда perl решает проблему выравнивания с помощью функции регулярного выражения perl - выполнение кода внутри выражения регулярного выражения (s///e).

Регулярное выражение также полагается на то, что в хэше не будет никаких символов @, поэтому одно совпадающее с ним заменит всегда будет второй столбец; это также является причиной того, что усечение происходит при 11 - @ всегда нужно печатать во втором столбце.

 Смежные вопросы

  • Нет связанных вопросов^_^