SED: chèn văn bản sau dòng cuối cùng?


76

Các lệnh chèn một thẻ để khởi đầu của một tập tin:

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

Làm cách nào tôi có thể chèn nội dung nào đó vào cuối mỗi tệp bằng SED?


3
{ cat file; echo 'END OF FILE'; } > newFile , điều này cũng hoạt động nhờ sh. *. (không phải sed nhưng hoạt động và đơn giản)

4
một đơn giản echo "Cool Text" >> filecũng nên làm các mẹo.
Danpe

Câu trả lời:


92

sed -e "\$aTEXTTOEND" là cách đơn giản nhất.

Làm thế nào nó hoạt động

$khớp với dòng cuối cùng (đó là một sedđịa chỉ bình thường ; 4aTEXTTOENDsẽ chèn sau dòng thứ tư), alà lệnh chắp thêm và TEXTTOENDlà những gì cần nối thêm.


Thoát $ như $$ trong Makefile.
stevesliva

Đối với OS X sed -e '$a\NEWLINE\\'. Thay thế NEWLINE bằng một dòng mới thực tế.
Jorge Bucaran

13
sed -i -e "\ $ aTEXTTOEND" <tên tệp> sẽ là lệnh đầy đủ.
Lasse Meyer

2
không hoạt động trên macos. Thậm chí không có bình luận nào của Jorge Bucaran: sed: 1: "$ a \ NEWLINE \\": các ký tự phụ sau \ ở cuối lệnh
Emanuele Paolini

1
Trong debian 9, nó thêm một dòng mới thay vì thêm vào cuối dòng cuối cùng.
Luciano Andress Martini

31

Không cần sử dụng sedtrong trường hợp đó. Làm thế nào về

echo "<?php" >> file

2
Đúng như vậy, nhưng bạn có thể đoán rằng trường hợp sử dụng của OP đang đặt dấu ngoặc cho tệp bằng " <php " và " >" và trích dẫn tất cả các nội dung được chọn trong một lần, vì vậy anh ta thực sự muốn có một sedđoạn.
dmckee

2
Ngoài ra nếu bạn sẽ làm điều này và không muốn có một dòng mới, hãy sử dụng echo -n
Vinko Vrsalovic

2
Tôi không muốn đoán. Mỗi lần tôi cố gắng, tôi đều sai.

4
Một lý do khác khiến câu trả lời được chấp nhận hữu ích hơn là trong trường hợp trả trước câu hỏi này sudo, điều này khiến cho biến thể này không thành công vì đó echolà lệnh shell được tích hợp thay vì tệp thực thi được tìm thấy trong$PATH
Tony Cesaro

@TonyCesaro: echolà một tệp tích hợp nhưng cũng là một tệp thực thi được tìm thấy trong$PATH
Zan Lynx

24

Giả sử bạn muốn đặt thẻ php kết thúc vào các tệp, sau đó

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

nên làm mánh khóe


1
Điều này hoạt động độc đáo trong trường hợp thao tác tùy ý của dòng đầu vào cuối cùng là mong muốn. Cảm ơn!
Jay Taylor

Một lời giải thích phân tách về lệnh sẽ được đánh giá rất cao
GGhe


3

Sử dụng lệnh sed 'append (a)'. Ví dụ: để nối hai dòng ở cuối tệp:

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

2

Một cách đơn giản để viết và thực hiện các thay đổi trong nội dung tại một dòng cụ thể trong một tệp. Nếu bạn muốn chèn bất cứ thứ gì vào một số dòng cụ thể thì có thể sử dụng lệnh bên dưới:

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

trong đó 2i- dòng số 2 và i là viết tắt của chèn. Nếu bạn phải chèn ở dòng cuối cùng thì sử dụng $ở vị trí 2. tôi đã bắt đầu - văn bản được chèn và sheikh.loglà tên tệp.

Chúng tôi cũng có thể thực hiện các thay đổi trong dòng bằng cách sử dụng lệnh dưới đây

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

iđược đổi thành we.

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.