Примерно так:
awk 'a{print $1""c;a=0}/###/{$1="";c=$0;a=1}' "$HOME"/.gitconfig | sort
Использование awk
, grep
и sed
в одной и той же трубе - это в основном знак того, что они не используются эффективно.Обычно их можно заменить одной командой awk
.
Для вывода с хорошим отступом вы можете использовать column
:
awk 'a{print $1"%"c;a=0}/###/{$1="";c=$0;a=1}' "$HOME"/.gitconfig | sort | column -ts%
Примечание. Я вводю разделитель %
с awk
, который используется для отступа вывода с column
Вывод:
ac add and commit a file, arg1=file, arg2=commit_message
alias print out available aliases
debug debug git aliases - 'git debug <alias>'
dt use difftool to view differences in file
ignore add a file to gitignore
ig remove any files that are in gitignore from tracking
quote-string Quote a sh command, converting it to a git alias string
quote-string-undo Unquote a git alias command command, converting it to a sh command
r git rm files that have been deleted without using git
Если у вас есть gawk
(GNU awk), вы также можете использоватьпросто awk, вот так:
#!/usr/bin/gawk -f
in_alias{
aliases[$1]=comment
in_alias=0
len=length($1)
if(len > maxlen){
maxlen = len
}
}
/###/{
$1=""
comment=$0
in_alias=1
}
END{
n = asorti(aliases, sorted) # <-- Requires gawk
for(i = 1; i <= n; i ++){
pad = maxlen - length(sorted[i]) + 1
printf "%s%"pad"s%s\n",sorted[i]," ",aliases[sorted[i]]
}
}
Сохраните это в файл, скажем, / usr / local / bin / git-aliases и сделайте его исполняемым:
chmod +x /usr/local/bin/git-aliases
git-aliases "$HOME"/.gitconfig