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#...#...#

おすすめ記事