NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
ID

Perintah Linux & Keterampilan Shell

sed: Mengedit Aliran Tanpa Membuka Editor

sed mengedit ke samping: seluruh aliran teks melewatinya, berubah, dan tidak ada editor yang terbuka. Reputasinya berasal dari -i, yang mengubah substitusi satu baris menjadi operasi batch pada ribuan file, dan dari kisah bencana admin yang menjalankannya tanpa akhiran cadangan. Alur kerja yang aman tidak pernah berubah: jalankan substitusi yang terlihat, konfirmasikan hasilnya, lalu tambahkan -i dengan akhiran dan pertahankan kode keluar.

Poin Utama

  1. Pratinjau sebelum Anda melakukan: file sed -n '10,20p' menunjukkan rentang garis, dan kombinasi -n plus p yang sama hanya mencetak baris yang cocok dengan regex atau alamat.
  2. Gantikan dengan bendera yang sesuai dengan maksud Anda: s/old/new/g untuk semua kecocokan, angka seperti 2g hanya untuk yang kedua, dan -E untuk regex yang diperluas tanpa halaman garis miring terbalik yang lolos.
  3. Pengeditan di tempat mendapatkan akhiran, tanpa pengecualian: aplikasi sed -i.bak 's/http:/https:/g' menyimpan cadangan dengan nama yang sama di samping setiap perubahan; akhiran tersebut telah menyelamatkan lebih banyak penerapan dibandingkan riwayat pembatalan editor mana pun.
  4. Pembatasnya gratis: s|/var/www|/srv/app|g (atau s#...#g) menghindari perkelahian yang lolos dari garis miring ketika pola Anda penuh dengan jalur.
  5. -i bukan atomik: crash atau regex yang buruk di tengah-tengah batch setelah meninggalkan file yang setengah ditulis ulang, sehingga pekerjaan massal dijalankan terhadap salinan atau pohon yang dilacak git, bukan satu-satunya salinan.
  6. GNU dan BSD sed tidak setuju pada -i: BSD memerlukan akhiran sebelum skrip (sed -i '' berfungsi pada macOS, bukan sintaksis Linux), yang merupakan satu lagi alasan mengapa skrip portabilitas menghindari -i sepenuhnya.
  7. Hapus dan isolasi adalah kata kerja yang jujur: 'd' menghapus baris yang cocok (sed '/^#/d' menghapus komentar), dan -n dengan rentang mengisolasi suatu bagian; keduanya membaca lebih baik daripada substitusi yang cerdas.
  8. Apa pun yang melewati pengeditan satu baris, blok multi-baris literal, atau gabungan stateful termasuk dalam awk atau skrip asli; memaksa sed untuk melakukan pekerjaan programmer adalah bagaimana lahirnya satu kalimat yang tidak dapat dibaca.

Catatan Lapangan

Sed -i pertama saya tanpa akhiran .bak mencapai konfigurasi produksi nginx tepat sebelum puncak lalu lintas sore hari. Sejak itu, setiap pengeditan di tempat membawa sufiks cadangan, dan saya membaca keluaran uji coba sebelum -i bahkan mendekati perintah.

Pertanyaan Umum

Bagaimana cara saya hanya mengedit baris yang cocok dengan yang lain?

Mengatasinya: sed '/cache/s/true/false/' membalik true ke false hanya pada baris cache, dan rentang seperti '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' mengedit cakupan ke blok; alamatnya duluan, perintahnya kedua.

Mengapa sed tidak cocok dengan akhir baris dalam file yang diedit Windows?

Baris tersebut diakhiri dengan karakter pengangkutan-kembali yang tidak diharapkan oleh jangkar '$'; hapus dengan tr terlebih dahulu atau normalkan saat masuk, dan konten multiline masih termasuk dalam awk atau Perl dengan -0777.

Apakah sed lebih cepat dari awk untuk penggantian sederhana?

Secara marginal dan tidak relevan; keduanya selesai dalam milidetik pada file berukuran konfigurasi. Pilih berdasarkan keterbacaan, karena seorang kolega harus menyelesaikan kalimat Anda dalam enam bulan.

Bisakah saya memasukkan seluruh blok konfigurasi dengan sed?

Ya: 'a' ditambahkan setelahnya, 'i' disisipkan sebelumnya, dan 'c' menggantikan baris, namun jaga agar teks yang disisipkan tetap sederhana dan memiliki satu tujuan; blok nyata termasuk dalam file templat atau langkah penyediaan yang tepat.

Bagaimana Kinetikatech membantu dengan perintah linux &amp; keterampilan shell

Ini adalah yang kami lakukan setiap hari: Perintah dan kebiasaan skrip yang menentukan apakah administrator mengoperasikan server atau melawannya: mencari, mengubah, mentransfer, dan mengawasi teks dan proses dengan alat yang ada di setiap instalasi dasar. Layanan kami Keamanan Server Linux dan Manajemen Server melindungi Anda dari ujung ke ujung: evaluasi, implementasi, pemantauan 24/7, dan respons darurat 30 menit.

Bicara dengan seorang insinyur

Masalah server? Situs diretas? Website lambat?

Masalah kritis dijawab dalam 30 menit — 24 jam sehari, 7 hari seminggu.

Minta Dukungan Darurat support@kinetikatech.com