การตีความง่าย ๆ :
ในบรรทัดแรกที่มี PATTERN เกิดขึ้นอย่างน้อยหนึ่งครั้งคุณต้องการละเว้นและพิมพ์บรรทัดตามที่เป็น บนบรรทัดที่สองที่มีการเกิดขึ้นอย่างน้อยหนึ่งครั้งคุณต้องการแทนที่อินสแตนซ์แรกของ PATTERN ด้วย REPLACEMENT ในบรรทัดที่สามที่มี PATTERN เกิดขึ้นอย่างน้อยหนึ่งครั้งคุณต้องการพิมพ์บรรทัดตามที่เป็น ในบรรทัดที่สี่ที่มีการเกิดขึ้นอย่างน้อยหนึ่งครั้งคุณต้องการแทนที่อินสแตนซ์แรกของ PATTERN ด้วย REPLACEMENT และอื่น ๆ เส้นที่ไม่ตรงกับรูปแบบควรพิมพ์โดยไม่มีการเปลี่ยนแปลง
ซึ่งสามารถทำได้อย่างง่ายดายด้วย Sed เช่น:
sed -e '/PATTERN/ { :inside' -e 'n;s//REPLACEMENT/;t' -e 'b inside' -e '}'
หรือด้วยช่องว่างที่น้อยลงและฉลากที่สั้นกว่า:
sed -e '/PATTERN/{:i' -e 'n;s//REPLACEMENT/;t' -e 'b i' -e '}'
แก้ไข: ฉันเพิ่งอ่านคำถามอีกครั้งและพบการตีความที่ยากขึ้น:
แทนที่การเกิดแบบที่สองของ PATTERN ในเอกสารทั้งหมดด้วย REPLACEMENT ไม่ว่าจะเกิดขึ้นในบรรทัดเดียวกันกับการเกิดครั้งแรกหรือไม่ ปล่อยให้เหตุการณ์ที่หนึ่งและที่สามไม่เปลี่ยนแปลง เป็นต้น
ฉันเชื่อว่าสิ่งนี้สามารถทำได้กับ Sed เช่นกันแม้ว่าจะเป็นเรื่องยากมากและฉันเชื่อว่ามันขึ้นอยู่กับการแสดงออกปกติที่จะใช้ ฉันจะพยายามหาข้อมูลและโพสต์มัน แต่ฉันจะปล่อยให้คำตอบนี้ยืนด้วยเวอร์ชันง่าย ๆ ข้างต้นในตอนนี้
sed -e 'n;s/2004-2009/6e législature/g'
ซึ่งแก้ไขปัญหาของฉันได้