2013-05-23 4 views
19

Tôi muốn chèn nội dung tệp tại khớp mẫu cụ thể. Sau đây là ví dụ: thêm nội dung file2.txt trong file1.txt giữa <tag></tag>.Chèn nội dung của một tập tin sau khi kết hợp mẫu cụ thể

file1.txt

<html> 
<body> 
<tag> 
</tag> 
</body> 
</html> 

file2.txt

Hello world!! 

Tôi đã thử sau đây và nó đã không làm việc.

# sed "/\<tag\>/ { 
h 
r file2.txt 
g 
N 
}" file1.txt 

<html> 
<body> 
Hello World!! 
<tag> 
</tag> 
</body> 
</html> 
+1

Bạn có thể thay đổi ' 'cho'', vì nó đang in * trước * ''. – fedorqui

+0

Tôi đã thử ''/ <\/tag> /' và nó hoạt động !!! hurray .. – Satish

Trả lời

36

Hãy thử lệnh sau:

sed '/<tag>/ r file2.txt' file1.txt 

Nó mang lại:

<html> 
<body> 
<tag> 
Hello world 
</tag> 
</body> 
</html> 

EDIT cho lời giải thích lý do tại sao lệnh của bạn không làm việc như bạn muốn: Lệnh r filename thêm nội dung của nó vào cuối chu kỳ hiện tại hoặc khi lần nhập tiếp theo dòng được đọc. Và bạn đang sử dụng lệnh N mà không in bất cứ điều gì nhưng đọc dòng tiếp theo, do đó, tại thời điểm đó Hello world được in và sau đó là dòng bình thường của dòng.

Trong trường hợp của tôi, nó đọc dòng <tag>, sau đó kết thúc chu kỳ, vì vậy hãy in dòng và sau đó là nội dung của tệp và tiếp tục đọc cho đến khi kết thúc.

+1

Các bạn thật tuyệt vời !! Tuyệt quá!!! Vấn đề trong cú pháp của tôi là gì? – Satish

+1

@Satish: Tôi đã chỉnh sửa câu trả lời để thêm giải thích. – Birei

+0

có cách nào để bọc nội dung bằng CDATA không? –