SED: masukkan teks setelah baris terakhir?


77

The perintah menyisipkan tag ke awal file:

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

Bagaimana saya bisa memasukkan sesuatu ke akhir setiap file dengan SED?


3
{ cat file; echo 'END OF FILE'; } > newFile , ini berfungsi juga berkat sh. *. (tidak sed tetapi bekerja dan sederhana)

4
Sederhana echo "Cool Text" >> filejuga harus melakukan trik.
Danpe

Jawaban:


95

sed -e "\$aTEXTTOEND" adalah cara paling sederhana.

Bagaimana itu bekerja

$cocok dengan baris terakhir (itu adalah sedalamat normal ; 4aTEXTTOENDakan disisipkan setelah baris keempat), aadalah perintah append, dan TEXTTOENDapa yang harus ditambahkan.


Escape $ as $$ dalam Makefile.
stevesliva

Untuk OS X sed -e '$a\NEWLINE\\'. Ganti NEWLINE dengan baris baru yang sebenarnya.
Jorge Bucaran

15
sed -i -e "\ $ aTEXTTOEND" <filename> akan menjadi perintah penuh.
Lasse Meyer

2
tidak bekerja pada makro. Bahkan Jorge Bucaran tidak berkomentar: sed: 1: "$ a \ NEWLINE \\": karakter tambahan setelah \ di akhir perintah
Emanuele Paolini

1
Dalam debian 9 ia menambahkan baris baru alih-alih menambahkan pada akhir baris terakhir.
Luciano Andress Martini

31

Tidak perlu digunakan seddalam kasus itu. Bagaimana tentang

echo "<?php" >> file

2
Cukup benar, tetapi Anda dapat menebak bahwa use case OP adalah mengurung file dengan " <php " dan " >", dan mengutip konten yang dipilih sekaligus, jadi dia mungkin benar - benar ingin sebuah sedfragmen.
dmckee

2
Juga jika Anda akan melakukan ini dan tidak ingin baris baru, gunakan echo -n
Vinko Vrsalovic

2
Saya tidak suka menebak. Setiap kali saya mencoba, saya salah.

4
Alasan lain mengapa jawaban yang diterima lebih berguna adalah dalam kasus menambahkan ini dengan sudo, yang menyebabkan variasi ini gagal karena echomerupakan perintah shell built-in daripada file executable ditemukan di$PATH
Tony Cesaro

@TonyCesaro: echoadalah built-in tetapi juga merupakan file yang dapat dieksekusi ditemukan di$PATH
Zan Lynx

24

Dengan asumsi Anda ingin meletakkan tag php akhir ke file, maka

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

harus melakukan trik


1
Ini bekerja dengan baik dalam kasus-kasus di mana manipulasi sewenang-wenang dari baris input terakhir diinginkan. Terima kasih!
Jay Taylor

Penjelasan dekomposisi dari perintah akan sangat dihargai
GGhe


3

Gunakan perintah sed 'append (a)'. Misalnya, untuk menambahkan dua baris di akhir file:

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

2

Dengan cara sederhana untuk menulis dan membuat perubahan pada konten pada baris tertentu dalam file. Jika Anda ingin memasukkan apa pun pada nomor baris tertentu maka perintah di bawah ini dapat digunakan:

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

di mana 2i- baris nomor 2 dan saya berdiri untuk memasukkan. Jika Anda harus memasukkan pada baris terakhir kemudian gunakan $di tempat 2. Saya sudah mulai - teks yang akan dimasukkan dan sheikh.logadalah nama file.

Kami juga dapat membuat perubahan di baris dengan menggunakan perintah di bawah ini

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

idiubah menjadi we.


-1

Pertama dan terakhir

Saya akan berasumsi bahwa siapa pun yang mencari cara memasukkan / menambahkan teks ke awal / akhir file mungkin juga perlu tahu bagaimana melakukan yang lain juga.

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

Penjelasan

Ini adalah caloutput yang disalurkan ke gnu- sed(dipanggil gsedpada macOS diinstal melalui brew.sh ) dengan diperpanjang RegEx ( -E) dan 6 "skrip" diterapkan ( -e) dan jeda baris lolos \untuk dibaca. Skrip 1 & 2 digunakan 1i\untuk "pada baris 1, masukkan". Skrip 5 & 6 digunakan $a\untuk "di baris <last>, tambahkan". Saya secara vertikal menyelaraskan output teks untuk membuat kode mewakili apa yang diharapkan dalam hasilnya. Skrip 3 & 4 melakukan pergantian (yang terakhir hanya berlaku untuk "baris <last>"). Hasilnya adalah mengonversi output perintah ke JSON yang valid.

keluaran

{
  "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        ",
    "                      "
  ]
}

Meskipun saya belum memberikan suara untuk pertanyaan Anda, perhatikan bahwa kami sudah memiliki beberapa jawaban, termasuk jawaban yang diterima, yang menunjukkan hasil yang diinginkan.
Jeff Schaller

@JeffSchaller Komunitas Stack Exchange bukan forum. Tujuannya melampaui membantu OP agar tidak terblokir. Tujuannya adalah untuk menanamkan basis pengetahuan global dengan banyak opsi yang dapat ditemukan para pencari ketika mencari jawaban. Alasan saya memberi judul jawaban saya adalah untuk membantu pengguna mengenali kegunaan jawaban ini bahkan sebelum mereka mengklik hasil Google.
Bruno Bronosky
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.