Сколько раундов экранирования необходимо в конфигурации Git alias? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть эта строка в моем .gitconfig, и есть много \

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

для повторного примера. \\\\\\( это просто начало группы в rexep, если она подходила для совпадения с символом.(, ему понадобится еще один слой для экранирования.

и точка после псевдонима должна, вероятно, иметь косую черту, но сколько?

Если кто-то может составить список, объясняющий, где находится процесскаждый слой escape-символов удаляется, я могу немного лучше понять, что происходит.

  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 Ответ

0 голосов
/ 16 октября 2018
  1. Поскольку вы пишете команду в строке в двойных кавычках, вам нужно использовать \\ вместо \.
  2. Поскольку вы не используете одинарные кавычки для команды sed, вынеобходимо включить дополнительную (двойную) обратную косую черту.

Вы можете уменьшить проблему, заключив в кавычки команду sed и используя -E, чтобы уменьшить потребность в группах захвата с обратной косой чертой:

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

Обратите внимание, что я также использовал sed -n с флагом p, чтобы избежать необходимости использовать grep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...