Cách chèn nhiều dòng với sed


10

Tôi muốn thêm cái này

#this 
##is my 
text

trước dòng

the specific line 

Tôi đã thử nó

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

nhưng nó chỉ thêm vào "văn bản".

Tôi cũng đã thử các kết hợp khác nhau với \" "nhưng không có gì hiệu quả.

Câu trả lời:


4

Với dòng mới:

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

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

9

Bạn đang thiếu dấu gạch chéo ngược ở cuối một số dòng (và bạn có một dòng mới liên tục ở cuối dòng cuối cùng bạn muốn chèn):

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

Khi chuỗi thay thế có dòng mới và dấu cách, bạn có thể sử dụng thứ khác. Chúng tôi sẽ cố gắng chèn đầu ra ls -lở giữa một số tệp mẫu.

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

Khi bạn muốn một cái gì đó được chèn sau một dòng, bạn có thể di chuyển lệnh {print}hoặc chuyển sang:

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

Bạn cũng có thể sử dụng sed để chèn trước một dòng với

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.