วิธีแทรกหลายบรรทัดด้วย sed


10

ฉันต้องการเพิ่มสิ่งนี้

#this 
##is my 
text

ก่อนที่จะสาย

the specific line 

ฉันลองสิ่งนี้

sed -i '/the specific line/i \
#this 
##is my 
text
' text.txt

แต่เพิ่มเฉพาะใน 'ข้อความ'

ฉันยังพยายามชุดต่างๆด้วย\และ" "แต่ไม่มีอะไรทำงาน

คำตอบ:


4

ด้วยการขึ้นบรรทัดใหม่:

% sed -i '/the specific line/i #this\n##is my\ntext' foo

% cat foo
#this
##is my
text
the specific line

9

คุณไม่มีเครื่องหมายแบ็กสแลชต่อท้ายที่จุดสิ้นสุดของบางบรรทัด (และคุณมีบรรทัดใหม่ที่มีประสิทธิภาพที่ท้ายบรรทัดสุดท้ายที่คุณต้องการแทรก):

sed -i '/the specific line/i \
#this\
##is my\
text' file
% cat file
foo
the specific line
bar

% sed -i '/the specific line/i \
#this\
##is my\
text' file

% cat file
foo
#this 
##is my 
text
the specific line
bar

1

เมื่อสตริงการแทนที่มีบรรทัดใหม่และช่องว่างคุณสามารถใช้อย่างอื่น เราจะพยายามแทรกเอาท์พุทของls -lตรงกลางของไฟล์เทมเพลต

awk 'NR==FNR {a[NR]=$0;next}
    /Insert index here/ {for (i=1; i <= length(a); i++) { print a[i] }}
    {print}'
    <(ls -l) text.txt

เมื่อคุณต้องการบางสิ่งแทรกหลังบรรทัดคุณสามารถย้ายคำสั่ง {print}หรือสลับไปที่:

sed '/Insert command output after this line/r'<(ls -l) text.txt

คุณยังสามารถใช้ sed เพื่อแทรกก่อนบรรทัดด้วย

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.