我的 .gitconfig 中有这一行,并且有很多 \
[alias]
alias = "!git config -l | egrep ^alias | sed -e s/alias.\\\([^=\ ]\\+\\\)=/\\1\ =\ /"
对于雷克森普尔来说,\\\(
只是雷克塞普组的开始,如果它被支持以匹配角色(,它需要另一层转义。
别名后面的点应该有一些斜杠,但有多少?
如果有人可以列出一个列表,解释在此过程中每层转义字符被删除的位置,我可能会对发生的事情有更多的了解。
- 别名后的点前应该有多少个\?
- 为什么?
编辑 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
- 由于您是在双引号字符串中编写命令,因此需要使用
\
而不是。
- 由于您没有单引号 sed 命令,因此您需要包含额外的(双(反斜杠。
可以通过引用 sed 命令并使用-E
来减少对反斜杠转义捕获组的需求来缓解此问题:
alias = "!git config -l | sed -nE 's/^alias\.([^= ]+)=/\1 = /p'"
请注意,我还使用了带有p
标志的sed -n
来避免使用 grep。