ฉันชอบใช้คำสั่งระดับโลกเป็นกลุ่มเพื่อทำงานให้สำเร็จเช่นนี้ สิ่งนี้ใช้กับการเพิ่มการวนซ้ำไปยังจุดเริ่มต้นของบรรทัดหรือแก้ไขสัญลักษณ์ในข้อความ มันดูซับซ้อนกว่าโซลูชันอื่น ๆ แต่เป็นรูปแบบที่ยืดหยุ่นพอสมควรเมื่อคุณใช้งานได้สะดวกและปรับเปลี่ยนได้ง่ายโดยไม่ต้องคิดมาก
ก่อนอื่นเลือกพิสัยของคุณ (เส้นไหนที่คุณต้องการใช้สิ่งนี้) ฉันมักจะใช้เครื่องหมาย (เช่นma
ในบรรทัดแรกและmb
ที่สอง แต่คุณยังสามารถใช้หมายเลขบรรทัดหรือการเลือกภาพ) จากนั้นป้อนการแก้ไขคำสั่งต่อไปนี้ (ปัจจุบันปรับแต่งสำหรับกรณีการใช้งานของคุณ)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
โครงสร้าง
:let i=1
สิ่งนี้จะตั้งค่าตัวแปรi
ด้วยค่าเริ่มต้น โดยปกติรายการเริ่มต้นด้วย 1 ดังนั้นฉันจึงตั้งค่า i เป็น 1
|
แถบเริ่มคำสั่งใหม่
'a,'b
ชุดนี้ช่วงของคำสั่งต่อไป ฉันจะทำเครื่องหมายจากa
เพื่อทำเครื่องหมายb
ซึ่งจะถูกตั้งค่าในบรรทัดแรกและบรรทัดสุดท้ายของรายการของคุณ
g/^/
นี่คือคำสั่งระดับโลก มันค้นหาไฟล์ (หรือช่วง) สำหรับการแสดงออกปกติที่กำหนดและจะดำเนินการส่วนที่เหลือของบรรทัดคำสั่งในแต่ละบรรทัดที่จับคู่ ฉันกำลังจับคู่ทุกบรรทัดโดยค้นหา "จุดเริ่มต้นของบรรทัด" หากคุณมีข้อความเช่น
Item some txt
other text
Item second item
whatever
Item third
และต้องการวางป้ายกำกับเหล่านี้ไว้ด้านหน้าItem
และละเว้นบรรทัดอื่นให้ทำg/Item/
หรือg/^Item/
แทน (สมมติว่าข้อความรายการตามตัวอักษร)
s/^/\=i.". "/
นี้ดำเนินการแสดงออกปกติเพื่อแทนที่จุดเริ่มต้นของเส้นที่มีค่าของการตัดแบ่งด้วยi
.
โดยทั่วไปคุณสามารถทำสิ่งนี้ได้ (แทนที่ฉลากItem
ด้วยหมายเลขเป็นต้น)
|let i=i+1
แม้ว่าบาร์จะเริ่มคำสั่งใหม่ แต่มันก็ตั้งค่าคำสั่งที่สองให้เรียกใช้ภายในคำสั่งโกลบอลแทนหลังจากที่โกลบอลเสร็จสมบูรณ์ ผลลัพธ์คือเราเพิ่มขึ้นi
ก่อนประมวลผลบรรทัดถัดไปโดย g ที่นี่เป็นอีกหนึ่งสถานที่ที่มีความยืดหยุ่น การดัดแปลงของ i สามารถเป็นอะไรก็ได้ (เพิ่มขึ้น 2, เรียกใช้ฟังก์ชันที่สร้างองค์ประกอบถัดไปของลำดับ Fibonacci, อะไรก็ตาม)
awk
อาจเป็นเครื่องมือสำหรับงานนี้ แต่ฉันอยู่บน Windows (ถอนหายใจ)