SED: แทรกข้อความหลังบรรทัดสุดท้าย?


76

คำสั่งแทรกแท็กที่จุดเริ่มต้นของไฟล์นี้:

sed -i "1s/^/<?php /" file

ฉันจะแทรกบางสิ่งลงในส่วนท้ายของแต่ละไฟล์ด้วย SED ได้อย่างไร


3
{ cat file; echo 'END OF FILE'; } > newFile งานนี้ต้องขอบคุณ SH * ด้วย (ไม่ได้ใช้งานง่าย แต่ใช้งานได้ง่าย)

4
ง่าย ๆecho "Cool Text" >> fileก็ควรทำเคล็ดลับ
Danpe

คำตอบ:


93

sed -e "\$aTEXTTOEND" เป็นวิธีที่ง่ายที่สุด

มันทำงานอย่างไร

$ตรงกับบรรทัดสุดท้าย (เป็นที่sedอยู่ปกติและ4aTEXTTOENDจะแทรกหลังบรรทัดที่สี่) aคือคำสั่งต่อท้ายและTEXTTOENDเป็นส่วนต่อท้าย


ยกเว้น $ เป็น $$ ใน Makefile
stevesliva

สำหรับ OS sed -e '$a\NEWLINE\\'X แทนที่ NEWLINE ด้วยบรรทัดใหม่จริง
Jorge Bucaran

13
sed -i -e "\ $ aTEXTTOEND" <filename> จะเป็นคำสั่งแบบเต็ม
Lasse Meyer

2
ไม่ทำงานกับ macos ไม่แม้แต่ Jorge Bucaran ความคิดเห็น: sed: 1: "$ a \ NEWLINE \\": อักขระพิเศษหลังจาก \ ที่ส่วนท้ายของคำสั่ง
Emanuele Paolini

1
ในเดเบียน 9 จะเพิ่มบรรทัดใหม่แทนที่จะเพิ่มที่ท้ายบรรทัดสุดท้าย
Luciano Andress Martini

31

ไม่จำเป็นต้องใช้sedในกรณีนั้น เกี่ยวกับ

echo "<?php" >> file

2
ทรูพอ แต่คุณสามารถคาดเดาว่ากรณีการใช้งานของ OP จะคร่อมไฟล์ด้วย " <php " และ " >" และอ้างเนื้อหาที่เลือกทั้งหมดในหนึ่งไปดังนั้นเขาอาจจริงๆไม่ต้องการsedชิ้นส่วน
dmckee

2
นอกจากนี้ถ้าคุณจะทำเช่นนี้และไม่ต้องการขึ้นบรรทัดใหม่ให้ใช้เสียงสะท้อน -n
Vinko Vrsalovic

2
ฉันไม่ชอบที่จะคาดเดา ทุกครั้งที่ฉันพยายามฉันผิด

4
อีกเหตุผลหนึ่งที่คำตอบที่ยอมรับนั้นมีประโยชน์มากกว่าคือในกรณีของการเตรียมสิ่งนี้ด้วยsudoซึ่งทำให้การเปลี่ยนแปลงนี้ล้มเหลวเนื่องจากechoเป็นคำสั่งเชลล์ในตัวแทนที่จะเป็นไฟล์สั่งการที่พบใน$PATH
Tony Cesaro

@TonyCesaro: echoเป็นไฟล์ในตัว แต่ยังเป็นไฟล์เรียกทำงานที่พบได้ใน$PATH
Zan Lynx

24

สมมติว่าคุณต้องการใส่แท็ก php สิ้นสุดลงในไฟล์จากนั้น

sed -i '$s/$/\n?>/' file

ควรทำเคล็ดลับ


1
วิธีนี้ใช้ได้ผลดีในกรณีที่ต้องการให้มีการป้อนข้อมูลบรรทัดสุดท้ายโดยพลการ ขอบคุณ!
Jay Taylor

คำอธิบายที่ย่อยสลายของคำสั่งจะได้รับการชื่นชมอย่างมาก
GGhe


3

ใช้คำสั่ง 'ผนวก (a)' sed ตัวอย่างเช่นในการผนวกสองบรรทัดที่ท้ายไฟล์:

sed -i -e '$a\
foo1 bar1\
foo2 bar2' file

2

วิธีง่ายๆในการเขียนและทำการเปลี่ยนแปลงเนื้อหาในบรรทัดที่ระบุในไฟล์ หากคุณต้องการแทรกสิ่งใด ๆ ที่หมายเลขบรรทัดเฉพาะคำสั่งด้านล่างสามารถใช้ได้:

sed -i '2i i have started' sheikh.log

โดยที่2i- หมายเลขบรรทัด 2 และฉันหมายถึงการแทรก หากคุณต้องแทรกที่บรรทัดสุดท้ายให้ใช้$แทน 2 ฉันเริ่มแล้ว - ข้อความที่จะแทรกและsheikh.logเป็นชื่อไฟล์

นอกจากนี้เรายังสามารถทำการเปลี่ยนแปลงในบรรทัดโดยใช้คำสั่งด้านล่าง

sed -i '2c we have started' sheikh.log

iweจะถูกเปลี่ยนเป็น


-1

ครั้งแรกและครั้งสุดท้าย

ฉันจะสมมติว่าทุกคนที่ค้นหาวิธีการแทรก / ต่อท้ายข้อความที่จุดเริ่มต้น / จุดสิ้นสุดของไฟล์อาจต้องทราบวิธีการทำเช่นกัน

cal |                            \
  gsed -E                        \
       -e     '1i\{'             \
       -e     '1i\  "lines": ['  \
       -e 's/(.*)/    "\1",/'    \
       -e '$s/,$//'              \
       -e     '$a\  ]'           \
       -e     '$a\}'

คำอธิบาย

นี่เป็นcalเอาต์พุตที่ส่งไปยัง gnu- sed(เรียกว่าgsedบน macOS ที่ติดตั้งผ่านbrew.sh ) พร้อมกับขยาย RegEx ( -E) และ 6 "สคริปต์" ถูกนำไปใช้ ( -e) และตัวแบ่งบรรทัดหนีออกมา\เพื่อความสะดวกในการอ่าน สคริปต์ 1 & 2 ใช้1i\เพื่อ "ที่บรรทัด 1, แทรก" สคริปต์ 5 & 6 ใช้$a\เพื่อ "at line <last>, ผนวก" ฉันจัดแนวเอาท์พุทข้อความในแนวตั้งเพื่อให้โค้ดแสดงสิ่งที่คาดหวังในผลลัพธ์ สคริปต์ 3 และ 4 ทำการทดแทน (รายการหลังใช้กับ "บรรทัด <last>" เท่านั้น) ผลลัพธ์กำลังแปลงเอาต์พุตคำสั่งเป็น JSON ที่ถูกต้อง

เอาท์พุต

{
  "lines": [
    "    October 2019      ",
    "Su Mo Tu We Th Fr Sa  ",
    "       1  2  3  4  5  ",
    " 6  7  8  9 10 11 12  ",
    "13 14 15 16 17 18 19  ",
    "20 21 22 23 24 25 26  ",
    "27 28 29 30 31        ",
    "                      "
  ]
}

ในขณะที่ฉันยังไม่ได้โหวตคำถามของคุณโปรดทราบว่าเรามีคำตอบหลายข้ออยู่แล้วซึ่งรวมถึงคำตอบที่ยอมรับแล้วซึ่งแสดงให้เห็นถึงผลลัพธ์ที่ต้องการ
Jeff Schaller

@JeffSchaller ชุมชน Stack Exchange ไม่ใช่ฟอรัม จุดประสงค์ของมันครอบคลุมเกินกว่าที่จะช่วยให้ OP ได้รับการปลดล็อค เป้าหมายคือการสร้างฐานความรู้ระดับโลกพร้อมตัวเลือกมากมายที่ผู้ค้นหาสามารถสะดุดเมื่อค้นหาคำตอบ เหตุผลที่ฉันตั้งชื่อคำตอบของฉันคือเพื่อช่วยให้ผู้ใช้รู้จักประโยชน์ของคำตอบนี้ก่อนที่จะคลิกผลลัพธ์ของ Google
Bruno Bronosky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.