เนื้อหาของfilename
ไฟล์ของฉันเป็นดังต่อไปนี้ (ตัวอย่าง):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
ฉันต้องการที่จะแทนที่บล็อกเส้นระหว่างSTART
และมีเพียงคำเดียวเช่นกับEND
SINGLEWORD
ชอบด้านล่าง:
My block of line starts from here
SINGLEWORD
and end to here for example.
ฉันสามารถหาบล็อกของบรรทัดด้วยการใช้คำสั่งนี้:
grep -Pzo "START(.|\n)*END" filename
และผลลัพธ์ของการรันคำสั่งด้านบนจะเป็นดังนี้:
START
First line
second line
third line
END
จากนั้นฉันใช้คำสั่งนี้เพื่อรวมบรรทัดทั้งหมดเป็นบรรทัดเดียว:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
จากนั้นฉันจะได้รับผลลัพธ์นี้:
START First line second line third line END
และด้วยคำสั่งสุดท้ายของLAST_RESULTS | sed 's/.*/SINGLEWORD/'
ฉันฉันเปลี่ยนพวกเขาเป็น"SINGLEWORD"
และฉันได้รับผลนี้
SINGLEWORD
ตอนนี้สิ่งที่ฉันต้องการคือ: ฉันจะใช้คำสั่งนี้ (หรือคำสั่งข้อเสนอแนะของคุณ) และแทนที่ (ในสถานที่) บล็อกบรรทัดของฉันเป็นคำ "SINGLEWORD" ได้อย่างไร และผลลัพธ์สุดท้ายจะเป็นเช่นนี้ไฟล์:
My block of line starts from here
SINGLEWORD
and end to here for example.
sed
ควรจะเป็นไปได้ แต่อาจจะอ่านยากกว่านี้ (ดูคำถามนี้)