GNU/Linux >> Belajar Linux >  >> Linux

sed:bagaimana cara mengganti baris jika ditemukan atau ditambahkan ke akhir file jika tidak ditemukan?

Ini sebenarnya cukup sederhana dengan sed :jika satu baris cocok, salin saja ke h ruang lama lalu s mengganti nilai.
Di la$ t baris ex ubah ruang tahan dan ruang pola lalu periksa apakah yang terakhir kosong. Jika tidak kosong, berarti pergantian sudah dilakukan jadi tidak ada hubungannya. Jika kosong, berarti tidak ditemukan kecocokan, jadi ganti spasi pola dengan variable=value yang diinginkan kemudian tambahkan ke baris saat ini di buffer penahan. Terakhir, ex ubah lagi:

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

Di atas adalah gnu sed sintaksis. Portabel:

sed '/^FOOBAR=/{
h
s/=.*/=newvalue/
}
${
x
/^$/{
s//FOOBAR=newvalue/
H
}
x
}' infile

Ini mungkin bisa dipersingkat. Ini bukan perintah sed tunggal dan juga menggunakan grep, tetapi pada dasarnya inilah yang Anda inginkan. Ini adalah satu baris, dan mengedit file di tempat (tidak ada file temp).

grep -q "^FOOBAR=" file && sed "s/^FOOBAR=.*/FOOBAR=newvalue/" -i file || 
    sed "$ a\FOOBAR=newvalue" -i file

Ini adalah sed yang lebih sederhana pendekatan, karena saya tidak menemukan sed hold space mudah untuk bekerja dengan. Jika Anda merasa nyaman dengan hold space , menggunakan pendekatan don_crissti memberikan peluang tambahan untuk mempertahankan apa pun dari baris yang ada, tetapi ini biasanya sangat jarang.

Dalam pendekatan ini, Anda cukup mencetak semua kecuali baris yang ingin Anda hilangkan, lalu di bagian akhir, tambahkan penggantinya.

sed -n -e '/^FOOBAR=/!p' -e '$aFOOBAR=newvalue' infile

Linux
  1. Bagaimana melakukan sed like text ganti dengan python?

  2. Bagaimana cara menambahkan baris dalam file zip tanpa membuka ritsleting?

  3. ganti baris dalam satu file dengan baris lain dengan nomor baris

  1. Cara Mudah Menambahkan Teks ke Akhir File di Linux

  2. Bagaimana Cara Mengganti String Dalam File?

  3. Bagaimana Cara Menyisipkan Teks Sebelum Baris Pertama Sebuah File?

  1. Cara mengganti string dalam banyak file di baris perintah linux

  2. Bagaimana cara menggunakan sed untuk mengganti variabel file konfigurasi?

  3. skrip bash menambahkan teks ke baris pertama file