代码之家  ›  专栏  ›  技术社区  ›  Puggan Se

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

  •  0
  • Puggan Se  · 技术社区  · 7 年前

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

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

    \\\\\\( 只是rexep中组的开始,如果要匹配字符(,则需要另一层转义。

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

    如果有人能列出一个清单,说明在这个过程中,每一层转义字符被删除的地方,我可能会对发生的事情有一点了解。

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

    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 回复  |  直到 7 年前
        1
  •  4
  •   Tom Fenech    7 年前
    1. 由于您是在双引号字符串中编写命令,因此需要使用 \\ 而不是 \
    2. 因为您不是单引号sed命令,所以需要包含额外的(双)反斜杠。

    -E 要减少对反斜杠转义捕获组的需要,请执行以下操作:

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

    注意,我还使用了 sed -n p 标记以避免使用grep。

    推荐文章