我有一个项目的.git/配置文件中有以下内容:
[user]
name = <FullName>
email = <EmailID>
username = <UserName>
[core]
editor = nvim
whitespace = fix,-indent-with-non-tab,trailing-space,cr-at-eol
pager = delta
[web]
browser = google-chrome
....
....
[alias]
a = add --all
ai = add -i
#############
ap = apply
as = apply --stat
ac = apply --check
....
....
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
现在我想复制多个部分及其内容,例如[别名],[过滤器“lfs”]等等,但不是[用户]和[网络]将此 .gitconfig 文件中的部分复制到另一个项目(与此项目的目录位于同一父目录下)的 .gitconfig 文件。
现在我知道我可以循环并打印此文件的行,但不知道如何将多个部分写入另一个文件(尽可能减少代码混乱),以便它不会覆盖目标文件的原始内容:
while read line || [ -n "$line" ]; do echo $line; done < $filename;
非常感谢您的帮助...
答案1
虽然你可以通过 bash/awk 来做到这一点,但我建议使用INI 文件解析器。例如,你可以在 Python 中使用以下代码执行以下操作配置解析器图书馆:
import sys
import configparser
def print_section(conf, section):
print("[{}]".format(section))
for key in conf[section]:
print(" {} = {}".format(key, conf[section][key]))
c = configparser.RawConfigParser()
c.read('config.ini')
sections = ['alias', 'filter "lfs"']
for s in sections:
print_section(c, s)
相同的一句话:
printf "import sys; import configparser; c = configparser.RawConfigParser(); c.read('config.ini'); sections = ['alias', 'filter \"lfs\"'];\nfor s in sections:\n print(\"[{}]\".format(s));\n for key in c[s]:\n print(\" {} = {}\".format(key, c[s][key]))" | python3