私はこれがあります。ほぼ私がしたいことをしなさい
git show-branch --current $SHA1 \
| sed --quiet --regexp-extended \
's/^.*\* \[[a-z]+\/(B-[0-9]+)-([a-z0-9-]+)\].*/\1 \2/p' \
| sed --quiet 2p
そして出力
B-47120 java-11-take2
git show-branch
これを出力しています
! [62cba3e2b3ba8e1115bceba0179fea6c569d9274] B-48141 remove env prefix
* [ccushing/B-47120-java-11-take2] B-48141 remove env prefix
--
* [ccushing/B-47120-java-11-take2] B-48141 remove env prefix
+* [62cba3e2b3ba8e1115bceba0179fea6c569d9274] B-48141 remove env prefix
私が望む出力は
B-47120 java 11 take2
2番目のキャプチャグループの'sを置き換えていますが、2番目の部分のonlyもキャプチャする必要があるため、置き換える方法が見つかりません-
。-
私はここにいるWindows用の子、付属のツールでのみ可能です。これを行うより多くのプログラムがありますが(Perlを使用することもできます)。可能であれば答えを見たいですsed
。
修正する
明らかに明らかではないからです。パターンは本質的にusername/ticketid-description
(パターンを得るために必要なものを除くgit show-branch
)です。
- ユーザー名は常にアルファでなければなりません。
- Ticketidの形式は常に
B-\d+
- 説明は
\2
空白-
に変換する必要があります。
prepare-commit-msg
git
プログラム的にこれをフック用のgitヘッダーラインに変換したいと思います。
ベストアンサー1
以下を試してください。
... |sed -nE '/^[[:blank:]*]+\[[^/]*\/(B-[0-9]+)-([^]]*)\].*/{
s//\1 \2/; :a s/(B-[0-9]+ [^-]*)-(.*)/\1 \2/;ta; p; }'
ヒント:
[^X]*
:すべての文字と一致しますが、文字は一致しませんX
(\n
ewlineを除く)。[^X]*X
:すべての文字と一致しますが、文字の後に文字が続く場合は一致しませんX
(ewline例外も含めます)。\n
X
(...)
\1
:最初、2番目などの逆参照のグループ一致をキャプチャします(最大逆参照数\2
までのみ設定できます)。\9
:label s/find/replace/; t label
:label
成功した置換にジャンプし、コマンドを繰り返します。
またはより短いもの(入力形式によって異なります):
... |sed -nE '/^[^/]*\/([^]]*)\].*/{
s//\1/; :a s/(B-[0-9]+)(.*)-([^-]*)$/\1\2 \3/;ta; p; }'