sed 没有捕获预期的文本

sed 没有捕获预期的文本

我正在使用 git 过滤器分支来完成一项特定任务。它使用 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'将被 shell 视为不带引号的字符串),或者
  • '"'master'"'(该字符串'master'将被 shell 视为双引号字符串)。

另外,为了避免牙签倾斜综合症,为命令使用另一个分隔符s

s#...#...#

答案2

不能嵌套单引号。前面的单引号master关闭后面开始的带引号的字符串--msg-filter

由于不能在单引号字符串中包含单引号,因此需要结束字符串并正确转义引号:

branch '\'master\'' of http

相关内容