Puncte:0

Cum să copiați conținut parțial (în special câteva secțiuni notate prin paranteze drepte) dintr-un fișier în altul cu un script shell?

drapel et

Am un singur proiect .git/config fișier în care am următorul conținut:

[utilizator]
    nume = <Nume complet>
    email = <EmailID>
    username = <UserName>
[nucleu]
    editor = nvim
    spatiu alb = corectare,-indentare-cu-non-tab, spatiu-final, cr-at-eol
    pager = delta
[web]
    browser = google-chrome
....
....
[alias]
    a = adaugă --all
    ai = adaugă -i
    #############
    ap = aplica
    as = aplica --stat
    ac = aplica --verifica
....
....
[filtrul „lfs”]
    curat = git-lfs curat -- %f
    smudge = git-lfs smudge -- %f
    proces = git-lfs filtru-proces
    necesar = adevărat

Acum vreau să copiez mai multe secțiuni și conținutul lor [alias], [filtrul „lfs”] etc dar nu [utilizator] și [web] secțiuni din acest fișier .gitconfig la fișierul .gitconfig al altui proiect (care se află sub același părinte ca directorul acestui proiect).

Acum știu că pot trece în buclă și pot imprima linii ale acestui fișier, dar nu am idee cum să scriu mai multe secțiuni într-un alt fișier (cu mai puțină aglomerație de cod posibil), astfel încât să nu suprascrie conținutul original al fișierului țintă:

în timp ce se citește linia || [ -n "$linie" ]; do echo $line; terminat < $filename;

Ajutorul este mult apreciat...

Puncte:2
drapel nl
P.P

Deși ați putea face acest lucru prin bash/awk, vă recomand să utilizați un fișier INI analizator. De exemplu, puteți face următoarele în Python folosind configparser bibliotecă:

import sys
import configurator

def print_section(conf, section):
    print("[{}]".format(sectiune))
    pentru cheia în conf[secțiunea]:
        print(" {} = {}".format(key, conf[section][key]))


c = configparser.RawConfigParser()
c.read('config.ini')

secțiuni = [„alias”, „filtru „lfs””]
pentru s în secțiuni:
    print_section(c, s)

Oneliner de aceeași:

printf "import sys; import configparser; c = configparser.RawConfigParser(); c.read('config.ini'); sections = ['alias', 'filter \"lfs\"'];\npentru s în secțiuni: \n print(\"[{}]\".format(e));\n pentru tastatura c[s]:\n print(\" {} = {}\".format(key, c[s] ][cheie]))" | python3
drapel et
Răspunsul dumneavoastră în Python este bun, dar puteți specifica și cum pot face acest lucru în Awk/Sed? Mi-ar plăcea să-l adaug la scriptul Shell pe care l-am creat deja
P.P avatar
drapel nl
P.P
@VickyDev Chiar nu merită durerea să o faci în coajă. Dacă doriți să integrați acest lucru într-un script (sau să rulați din cmdline), puteți rula la fel ca un oneliner - a actualizat răspunsul.
drapel et
Ok, dacă îl scriu în fișier folosind python, cum ar fi `with open (...)` și apoi `fwrite` append, cum pot forța noua linie când fiecare linie următoare (a secțiunii, înseamnă titlul secțiunii, apoi linia nouă și apoi linia conținutului secțiunii după structura exactă a liniilor) este scris?
drapel et
Chiar acum, cu `fwrite` de bază scrie 4 spații în loc de următoarea linie cu indentare, cum rezolv asta?
P.P avatar
drapel nl
P.P
@VickyDev Codul din răspuns formatează secțiunile. Nu este lucru pentru tine?
drapel et
Despre tipărire este bine, dar așa cum am întrebat în întrebare, vreau să fie scris/anexat la alt fișier. Formatul plasează textul așa cum este cu semnul egal, dar nu funcționează când scrieți cu linii noi și indentare pe fiecare linie de 4 spații inițial
P.P avatar
drapel nl
P.P
@VickyDev Nu sunt sigur că vă înțeleg întrebarea. Dacă doriți să adăugați un alt fișier, nu puteți redirecționa onlinerul `... | python3 >> alt_fișier` sau `... | python3 > another_file` pentru a suprascrie?
drapel et
Îmi pare rău, mă gândeam doar la f.write, dar da și asta funcționează, accept.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.