GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memasukkan teks ke baris pertama file menggunakan sed?

Misalkan Anda memiliki file seperti ini:

one
two

Kemudian untuk menambahkan baris pertama:

$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two

Untuk menyisipkan sebelum baris pertama:

$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two

Atau, untuk menambahkan setelah baris pertama:

$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two

Perhatikan angka 1 di sed tersebut ekspresi - yang disebut alamat di sed terminologi. Ini memberi tahu Anda di baris yang mana perintah berikut adalah mengoperasikan.

Jika file Anda tidak berisi baris yang Anda tuju, sed perintah tidak akan dieksekusi. Itu sebabnya Anda tidak dapat menyisipkan/menambahkan pada baris 1, jika file Anda kosong.

Alih-alih menggunakan editor aliran , untuk menambahkan (untuk mengosongkan file), cukup gunakan pengalihan shell >> :

echo "content" >> file

Masalah Anda berasal dari fakta bahwa sed tidak dapat menemukan baris yang ingin Anda tulis, misalnya:

touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test

mencoba menulis untuk menyisipkan pada baris 1 dari test , tetapi garis itu tidak ada pada saat ini. Jika Anda telah membuat file sebagai:

echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test

itu tidak akan mengeluh, tetapi Anda akan memiliki jalur tambahan. Demikian pula, saat Anda menelepon:

sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"

Anda memberi tahu sed untuk menyisipkan data berikut pada baris 2 yang tidak ada pada saat itu jadi sed tidak bisa mengedit file.

Jadi, untuk baris awal atau baris terakhir pada file, sebaiknya jangan menggunakan sed karena > sederhana dan >> pengalihan aliran sudah lebih dari cukup.


Perintah Anda akan berfungsi jika Anda memastikan file input memiliki setidaknya satu baris:

[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test

Linux
  1. Belajar menggunakan editor teks Sed

  2. Memanipulasi teks pada baris perintah dengan sed

  3. Bagaimana Cara Memindahkan Garis Dalam File Teks Ke Atas Atau Ke Bawah Dengan Satu Baris?

  1. Bagaimana Perintah Sed '1!g;h;$!d' Membalikkan Isi File?

  2. Buat file dengan menggunakan baris perintah di Linux

  3. Bagaimana cara membaca baris kedua hingga terakhir dalam file menggunakan Bash?

  1. Cara Mengekstrak File tar.gz di Linux dengan Menggunakan Command Line

  2. Cara Menyisipkan Teks di awal setiap baris di Vim

  3. Bagaimana cara membaca baris terakhir file teks menjadi variabel menggunakan Bash?