sed は期待されるテキストをキャプチャしません。

sed は期待されるテキストをキャプチャしません。

私は特定のタスクを実行するためにgit filterブランチを使用しています。 sed コマンドを使用します。単純な正規表現を使用すると、すべてがうまく機能しますが、より複雑な場合は機能しません。多分正規表現やエスケープ文字に間違いがあるかもしれません。助けてください。

git filter-branch -f --msg-filter 'sed -e "s/\[PEM-2233\] Merge branch 'master' of https:\/\/bitbucket\.test\.domain\.com\/rrr\/pem\/hello-world into feature\/PEM-2233-do-acceptance-tests/CHANGED/"' -- --all

私がキャプチャしたいコミットメッセージは次のとおりです。

[PEM-2233] Merge branch 'master' of https://bitbucket.test.domain.com/rrr/pem/hello-world into feature/PEM-2233-do-acceptance-tests

答え1

問題は周囲の一重引用符です'master'。これらの引用符の最初は、単一引用符で始まる文字列を終了しますsed -e。見積もり自体はに渡されませんsed

これは質問に該当します

$ echo '"hello 'user'"'
"hello user"

参照を次に変更します。

  • '\'master\''(この文字列は'master'シェルで引用されていない文字列として扱われます。)
  • '"'master'"'(この文字列は'master'シェルで二重引用符で囲まれた文字列として扱われます)。

さらに、そのようなことが起こらないように傾いたつまようじ症候群、コマンドに別の区切り文字を使用してくださいs

s#...#...#

答え2

一重引用符は入れ子にできません。前の一重引用符は、次の引用符をmaster閉じます--msg-filter

一重引用符で囲まれた文字列の中には一重引用符を使用できないため、文字列を終了して引用符を正しくエスケープする必要があります。

branch '\'master\'' of http

関連情報