Score:0

วิธีคัดลอกเนื้อหาบางส่วน (เฉพาะบางส่วนที่แสดงด้วยวงเล็บเหลี่ยม) จากไฟล์หนึ่งไปยังอีกไฟล์หนึ่งด้วยเชลล์สคริปต์

ธง et

ฉันมีโครงการหนึ่ง .git/config ไฟล์ที่ฉันมีเนื้อหาดังต่อไปนี้:

[ผู้ใช้]
    ชื่อ = <ชื่อเต็ม>
    อีเมล = <รหัสอีเมล>
    ชื่อผู้ใช้ = <ชื่อผู้ใช้>
[หลัก]
    เอดิเตอร์ = nvim
    ช่องว่าง = แก้ไข,-เยื้อง-กับ-ไม่-แท็บ,ต่อท้าย-ช่องว่าง,cr-at-eol
    เพจเจอร์ = เดลต้า
[เว็บ]
    เบราว์เซอร์ = google-chrome
....
....
[นามแฝง]
    a = เพิ่ม -- ทั้งหมด
    ai = เพิ่ม -i
    #############
    ap = สมัคร
    เป็น = ใช้ --stat
    ac = ใช้ -- ตรวจสอบ
....
....
[ตัวกรอง "lfs"]
    สะอาด = git-lfs สะอาด -- %f
    smudge = git-lfs smudge -- %f
    กระบวนการ = git-lfs กรองกระบวนการ
    จำเป็น = จริง

ตอนนี้ฉันต้องการคัดลอกหลายส่วนและเนื้อหาเช่น [นามแฝง], [ตัวกรอง "lfs"] ฯลฯ แต่ไม่ใช่การ [ผู้ใช้] และ [เว็บ] ส่วนจากไฟล์ .gitconfig นี้ไปยังไฟล์ .gitconfig ของโปรเจ็กต์อื่น (ซึ่งอยู่ภายใต้พาเรนต์เดียวกันกับไดเร็กทอรีของโปรเจ็กต์นี้)

ตอนนี้ฉันรู้แล้วว่าฉันสามารถวนซ้ำและพิมพ์บรรทัดของไฟล์นี้ได้ แต่ไม่รู้ว่าจะเขียนหลายส่วนไปยังไฟล์อื่นได้อย่างไร (โดยมีความยุ่งเหยิงของโค้ดน้อยที่สุดเท่าที่จะเป็นไปได้) เพื่อไม่ให้เขียนทับเนื้อหาดั้งเดิมของไฟล์เป้าหมาย:

ขณะอ่านบรรทัด || [ -n "$บรรทัด" ]; ทำ echo $line; เสร็จแล้ว < $filename;

ความช่วยเหลือเป็นที่ชื่นชมมาก ...

Score:2
ธง nl
P.P

ในขณะที่คุณสามารถทำได้ผ่าน bash/awk ฉันขอแนะนำให้ใช้ไฟล์ ไฟล์ INI โปรแกรมแยกวิเคราะห์ ตัวอย่างเช่น คุณสามารถทำสิ่งต่อไปนี้ใน Python โดยใช้ configparser ห้องสมุด:

นำเข้าระบบ
นำเข้า configparser

def print_section (conf ส่วน):
    พิมพ์("[{}]".รูปแบบ(ส่วน))
    สำหรับคีย์ใน conf[section]:
        พิมพ์ (" {} = {}".format (คีย์, conf [ส่วน][คีย์]))


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

ส่วน = ['นามแฝง', 'กรอง "lfs"']
สำหรับ s ในส่วน:
    print_section(c, s)

Oneliner เดียวกัน:

printf "import sys; import configparser; c = configparser.RawConfigParser(); c.read('config.ini'); sections = ['alias', 'filter \"lfs\"'];\nสำหรับ s ในส่วน: \n print(\"[{}]\".format(s));\n สำหรับคีย์ใน c[s]:\n print(\" {} = {}\".format(key, c[s ][คีย์]))" | หลาม3
et flag
คำตอบของคุณใน Python นั้นดี แต่คุณช่วยระบุได้ไหมว่าฉันจะทำอย่างไรใน Awk/Sed ? ฉันต้องการเพิ่มลงในเชลล์สคริปต์ที่ฉันสร้างไว้แล้ว
P.P avatar
nl flag
P.P
@VickyDev มันไม่คุ้มกับความเจ็บปวดที่จะทำในเปลือก หากคุณต้องการรวมสิ่งนี้เข้ากับสคริปต์ (หรือเรียกใช้จาก cmdline) คุณสามารถเรียกใช้แบบเดียวกับ oneliner - อัปเดตคำตอบ
et flag
โอเค ถ้าฉันเขียนลงไฟล์โดยใช้ python เช่น `with open(...)` แล้วต่อท้าย `fwrite` ฉันจะบังคับให้ขึ้นบรรทัดใหม่ได้อย่างไรในเมื่อทุกๆ บรรทัดถัดไป (ของส่วน หมายถึงชื่อส่วน ขึ้นบรรทัดใหม่ และบรรทัดเนื้อหาของส่วน) ตามโครงสร้างที่แน่นอนของบรรทัด) กำลังเขียนอยู่ ?
et flag
ตอนนี้ `fwrite` พื้นฐานกำลังเขียนช่องว่าง 4 ช่องแทนที่จะเป็นบรรทัดถัดไปด้วยการเยื้อง ฉันจะแก้ปัญหานั้นได้อย่างไร
P.P avatar
nl flag
P.P
@VickyDev รหัสในคำตอบจัดรูปแบบส่วนต่างๆ มันไม่เหมาะกับคุณเหรอ?
et flag
เกี่ยวกับการพิมพ์ไม่เป็นไร แต่อย่างที่ฉันถาม ฉันต้องการให้เขียน/ต่อท้ายไฟล์อื่น รูปแบบเพียงแค่วางข้อความตามที่มีเครื่องหมายเท่ากับ แต่มันใช้งานไม่ได้เมื่อเขียนด้วยการขึ้นบรรทัดใหม่และการเยื้องในแต่ละบรรทัดของช่องว่าง 4 ในตอนแรก
P.P avatar
nl flag
P.P
@VickyDev ฉันไม่แน่ใจว่าฉันเข้าใจคำถามของคุณ หากคุณต้องการต่อท้ายไฟล์อื่น คุณไม่สามารถเปลี่ยนเส้นทางออนไลน์ `... | python3 >> another_file` หรือ `... | python3 > another_file` เพื่อเขียนทับ?
et flag
ขออภัย กำลังคิดแต่เรื่อง f.write แต่ก็ใช้ได้เหมือนกัน ยอมรับ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา