如何使用 shell 脚本将部分内容(特别是方括号表示的几个部分)从一个文件复制到另一个文件?

如何使用 shell 脚本将部分内容(特别是方括号表示的几个部分)从一个文件复制到另一个文件?

我有一个项目的.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

相关内容