Git 别名配置中需要多少轮转义?



我的 .gitconfig 中有这一行,并且有很多 \

[alias]
alias = "!git config -l | egrep ^alias | sed -e s/alias.\\\([^=\ ]\\+\\\)=/\\1\ =\ /"

对于雷克森普尔来说,\\\(只是雷克塞普组的开始,如果它被支持以匹配角色(,它需要另一层转义。

别名后面的点应该有一些斜杠,但有多少?

如果有人可以列出一个列表,解释在此过程中每层转义字符被删除的位置,我可能会对发生的事情有更多的了解。

  1. 别名后的点前应该有多少个\?
  2. 为什么?

编辑 1、示例数据:grep alias ~/.gitconfig -A 6

[alias]
alias = "!git config -l | egrep ^alias | sed -e s/alias.\\\([^=\ ]\\+\\\)=/\\1\ =\ /"
blog = log --graph --oneline --decorate --all --simplify-by-decoration
flog = log --graph --oneline --decorate --all
test = !composer test
require = !composer require
update = !composer update
install = !composer install

示例输出git alias

alias = !git config -l | egrep ^alias | sed -e s/alias.\([^= ]\+\)=/\1 = /
blog = log --graph --oneline --decorate --all --simplify-by-decoration
flog = log --graph --oneline --decorate --all
test = !composer test
require = !composer require
update = !composer update
install = !composer install

示例输出git config -l(仅限静止行(

alias.alias=!git config -l | egrep ^alias | sed -e s/alias.\([^= ]\+\)=/\1 = /
alias.blog=log --graph --oneline --decorate --all --simplify-by-decoration
alias.flog=log --graph --oneline --decorate --all
alias.test=!composer test
alias.require=!composer require
alias.update=!composer update
alias.install=!composer install
  1. 由于您是在双引号字符串中编写命令,因此需要使用\而不是
  2. 由于您没有单引号 sed 命令,因此您需要包含额外的(双(反斜杠。

可以通过引用 sed 命令并使用-E来减少对反斜杠转义捕获组的需求来缓解此问题:

alias = "!git config -l | sed -nE 's/^alias\.([^= ]+)=/\1 = /p'"

请注意,我还使用了带有p标志的sed -n来避免使用 grep。

最新更新