Итак, я наказал свой маленький мозг, подтолкнул и придумал уродливое решение .
Я не думаю, что это лучший вариант, поэтому я все равно буду признателен / принять любую помощь и улучшения!
git log 7.2.0..HEAD --oneline |
grep -iEo "([a-f0-9]{7})(.*[a-zA-Z0-9]{2,6}-[0-9]{1,4})+" |
sort -u |
sed -E $'s/([a-f0-9]{7}|[a-zA-Z0-9]{2,7}-[0-9]{1,4})/ \\\n\\1\\\n/g' |
grep -iEo "([a-f0-9]{7}|[a-zA-Z0-9]{2,6}-[0-9]{1,4})+" |
tr '\n' ' ' |
sed -E $'s/([a-f0-9]{7})/\\\n\\1 →/g' |
sed -E 's/([a-zA-Z0-9]{2,7}-[0-9]{1,4})/\1,/g' |
sed -E 's/(..)$//'
эта команда разбивает совпадающие выражения на несколько строк, используя sed
для вставки некоторого \ n
, затем grep
снова необходимые мне выражения, и только держит их. Затем, наконец, он возвращается и заменяет эти \ n
символами →
и ,
соответственно, а затем обрезает последние ,
.
В итоге я получаю:
58dbb08 → ABC-123
5a9c5e1 → XYZ-987
6070ee0 → MNO-456, MNO-999
Я считаю, что это достаточно быстро при размере журнала менее 200 коммитов ... его цель - помочь сгенерировать некоторые списки проблем в примечаниях к выпуску, так что это не должно ' Это намного больше. Но опять же; любые улучшения скорости / качества приветствуются!
^M означает, что вы переносите/редактируете файл в Windows.
Используйте команду dos2unix
над файлами, чтобы преобразовать их в текстовый режим Unix.
DOS использует возврат каретки и перевод строки "\r\n" в качестве конца строки, в то время как Unix использует только перевод строки "\n". ^M — это визуальное представление «лишних» символов \r.
Чтобы установить команду dos2unix
, выполните (в дистрибутивах на базе Debian):
sudo apt-get install dos2unix
или в Mac (MacPorts):
sudo port install dos2unix
Кроме того, вы также можете сделать это с помощью sed, как показано ниже:
sed 's/\r$//' dosfile.txt > unixfile.txt
join(1)
(по крайней мере, версия, которую я использую) не добавляет ^M
или возврат каретки к объединенным файлам; Однако join
с радостью скопирует ^M
. Hex viewer плюс некоторые тестовые примеры могут показать, что происходит:
$ echo "1 a" > test1
$ echo "1 b" > test2
$ join test1 test2 | od -bc
0000000 061 040 141 040 142 012
1 a b \n
0000006
$
И тестовый пример, где во входных файлах есть ^M
:
$ perl -E "say qq(1 a\r)" > test1
$ perl -E "say qq(1 b\r)" > test2
$ join test1 test2 | od -bc
0000000 061 040 141 015 040 142 015 012
1 a \r b \r \n
0000010
$
Существуют различные способы исправления входных файлов, помимо dos2unix
можно также использовать tr
(хотя это было бы ужасной идеей, если файл использует древнюю традицию MacOS \r
в качестве разделителя строк):
$ od -bc test1
0000000 061 040 141 015 012
1 a \r \n
0000005
$ tr -d '\r' < test1 > foo
$ mv foo test1
$ od -bc test1
0000000 061 040 141 012
1 a \n
0000004
$