วิธีเพิ่มส่วนหัวและ / หรือท้ายกระดาษไปยังสตรีม sed หรือ awk


13

ฉันมีกลุ่มของผลลัพธ์ที่จะผ่าน sed และ awk

ฉันจะนำหน้าผลลัพธ์ด้วย START และต่อท้ายคำตอบด้วย END ได้อย่างไร

ตัวอย่างเช่นถ้าฉันมี

All this code
on all these lines
and all these

ฉันจะได้รับ:

START
All this code
on all these lines
and all these
END

?

ความพยายามของฉันคือ:

awk '{print "START";print;print "END"}'

แต่ฉันได้

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END

คำตอบ:



11

ซึ่งสามารถทำได้sedด้วย

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1iหมายถึงi nsert ก่อนบรรทัด 1; $aหมายความppend หลังจากบรรทัดสุดท้าย ไวยากรณ์ทุบตีเฉพาะ ในเชลล์อื่น ๆ คุณควรทำสิ่งนี้ด้วย:$'…'

sed -e '1i \ Enter
START' -e '$ a \ Enter
END'Enter

8

หากคุณใช้ sed อยู่แล้วคุณสามารถใช้1เพื่อจับคู่บรรทัดแรกและ$จับคู่บรรทัดสุดท้าย (ดูคำตอบของ Scott ) หากคุณใช้ awk อยู่แล้วคุณสามารถใช้BEGINบล็อกเพื่อรันโค้ดก่อนบรรทัดแรกและENDบล็อกเพื่อรันโค้ดหลังจากบรรทัดสุดท้าย (ดูคำตอบของ Michael Durrant )

หากสิ่งที่คุณต้องทำคือการเพิ่มส่วนหัวและส่วนท้ายใช้เพียงและechocat

echo START
cat
echo END

ในไปป์ไลน์เมื่อต้องการเรียกใช้หลายคำสั่งใช้{ … }เพื่อบอกให้ parser ทราบว่าเป็นคำสั่งผสมเดียว

content-generator |
{ echo START; cat; echo END; } |
postprocessor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.