Setiap administrator sistem harus berurusan dengan file teks biasa setiap hari. Mengetahui cara melihat bagian tertentu, cara mengganti kata, dan cara memfilter konten dari file tersebut adalah keterampilan yang harus Anda miliki tanpa harus melakukan pencarian Google.
Dalam artikel ini kami akan mengulas sed, editor streaming terkenal, dan membagikan 15 tips untuk menggunakannya untuk mencapai tujuan yang disebutkan sebelumnya, dan banyak lagi.
Alat seperti kepala dan ekor memungkinkan kita untuk melihat bagian bawah atau atas suatu file. Bagaimana jika kita perlu melihat bagian di tengah? One-liner sed berikut akan mengembalikan garis 5 melalui 10 dari file saya.txt:
# sed -n '5,10p' myfile.txt.
Di sisi lain, Anda mungkin ingin mencetak seluruh file kecuali rentang tertentu. Untuk mengecualikan garis 20 melalui 35 dari file saya.txt, melakukan:
# sed '20,35d' myfile.txt.
Mungkin saja Anda tertarik dengan rangkaian garis yang tidak berurutan, atau lebih dari satu rentang. Mari kita tampilkan garis 5-7 dan 10-13 dari file saya.txt:
# sed -n -e '5,7p' -e '10,13p' myfile.txt.
Seperti yang Anda lihat, -e
opsi memungkinkan kita untuk menjalankan tindakan yang diberikan (dalam hal ini, mencetak baris) untuk setiap rentang.
Untuk mengganti setiap contoh kata Versi: kapan
dengan cerita
di dalam file saya.txt, melakukan:
# sed 's/version/story/g' myfile.txt.
Selain itu, Anda mungkin ingin mempertimbangkan untuk menggunakan gi
dari pada G
untuk mengabaikan huruf besar-kecil:
# sed 's/version/story/gi' myfile.txt.
Untuk mengganti beberapa ruang kosong dengan satu ruang, kami akan menggunakan output dari acara rute ip
dan pipa:
# ip rute menunjukkan | sed 's/ */ /g'
Bandingkan keluaran dari acara rute ip
dengan dan tanpa pipa:
Jika Anda tertarik untuk mengganti kata hanya dalam rentang baris (30 melalui 40, misalnya), Anda dapat melakukan:
# sed '30,40 s/version/story/g' myfile.txt.
Tentu saja, Anda dapat menunjukkan satu baris melalui nomor yang sesuai, bukan rentang.
Terkadang file konfigurasi dimuat dengan komentar. Meskipun ini tentu berguna, kadang-kadang mungkin berguna untuk menampilkan hanya arahan konfigurasi jika Anda ingin melihat semuanya secara sekilas.
Untuk menghapus baris kosong atau yang dimulai dengan #
dari file konfigurasi Apache, lakukan:
# sed '/^#\|^$\| *#/d' httpd.conf.
Tanda caret diikuti oleh tanda angka (^#)
menunjukkan awal baris, sedangkan ^$
mewakili baris kosong. Batang vertikal menunjukkan operasi boolean, sedangkan garis miring digunakan untuk menghindari batang vertikal.
Dalam kasus khusus ini, file konfigurasi Apache memiliki baris dengan #'S
bukan di awal beberapa baris, jadi *#
digunakan untuk menghapusnya juga.
Untuk mengganti kata yang dimulai dengan huruf besar atau huruf kecil dengan kata lain, kita juga bisa menggunakan sed. Untuk mengilustrasikannya, mari kita ganti kata zip atau Zip dengan rar di file saya.txt:
# sed 's/[Zz]ip/rar/g' myfile.txt.
Jangan Lewatkan:Gunakan Awk dengan Ekspresi Reguler untuk Memfilter Teks dalam File
Penggunaan lain dari sed terdiri dari mencetak baris dari file yang cocok dengan ekspresi reguler yang diberikan. Misalnya, kami mungkin tertarik untuk melihat aktivitas otorisasi dan otentikasi yang terjadi pada 2 Juli, sesuai dengan /var/log/secure masuk CentOS 7 server.
Dalam hal ini, pola yang dicari adalah 2 Juli di awal setiap baris:
# sed -n '/^Jul 1/ p' /var/log/secure.
Dengan sed, kita juga dapat menyisipkan spasi (baris kosong) untuk setiap baris yang tidak kosong dalam sebuah file. Untuk menyisipkan satu baris kosong ke setiap baris lainnya LISENSI, file teks biasa, lakukan:
# sed G myfile.txt.
Untuk menyisipkan dua baris kosong, lakukan:
# sed 'G; G' myfile.txt.
Tambahkan sebuah huruf besar G dipisahkan dengan titik koma jika Anda ingin menambahkan lebih banyak baris kosong. Gambar berikut mengilustrasikan contoh yang diuraikan dalam tip ini:
Tip ini mungkin berguna jika Anda ingin memeriksa file konfigurasi besar. Menyisipkan ruang kosong di setiap baris lainnya dan menyalurkan output ke lebih sedikit akan menghasilkan pengalaman membaca yang lebih ramah.
NS dos2unix program mengonversi file teks biasa dari pemformatan Windows/Mac ke Unix/Linux, menghapus karakter baris baru tersembunyi yang disisipkan oleh beberapa editor teks yang digunakan di platform tersebut. Jika tidak diinstal di sistem Linux Anda, Anda dapat meniru fungsinya dengan sed bukannya menginstalnya.
Pada gambar di sebelah kiri kita dapat melihat beberapa karakter baris baru DOS (^M)
, yang kemudian dihapus dengan:
# sed -i 's/\r//' myfile.txt.
Harap dicatat bahwa -Saya
opsi menunjukkan pengeditan di tempat. Maka perubahan tidak akan dikembalikan ke layar, tetapi akan disimpan ke file.
Catatan: Anda dapat memasukkan karakter baris baru DOS saat mengedit file di editor vim dengan Ctrl+V
dan Ctrl+M
.
Di tip sebelumnya kami menggunakan sed untuk memodifikasi file tetapi tidak menyimpan file asli. Terkadang ada baiknya untuk menyimpan salinan cadangan dari file asli untuk berjaga-jaga.
Untuk melakukannya, tunjukkan akhiran setelah -Saya
option (di dalam tanda kutip tunggal) yang akan digunakan untuk mengganti nama file asli.
Dalam contoh berikut, kami akan mengganti semua instance dari ini atau Ini (mengabaikan kasus) dengan itu di file saya.txt, dan kami akan menyimpan file aslinya sebagai file saya.txt.asal.
Akhirnya, kami akan menggunakan perbedaan utilitas untuk mengidentifikasi perbedaan antara kedua file:
# sed -i'.orig' 's/this/that/gi' myfile.txt.
Misalkan Anda memiliki file yang berisi nama lengkap dalam format Nama depan, nama keluarga. Untuk memproses file secara memadai, Anda mungkin ingin beralih nama keluarga dan Nama depan.
Kita bisa melakukannya dengan sed cukup mudah:
# sed 's/^\(.*\),\(.*\)$/\, /g' nama.txt.
Pada gambar di atas kita dapat melihat bahwa tanda kurung, sebagai karakter khusus, perlu diloloskan, seperti halnya angka 1 dan 2.
Angka-angka ini mewakili ekspresi reguler yang disorot (yang perlu muncul di dalam tanda kurung):
Output yang diinginkan ditunjukkan dalam format Kolom Kedua (nama keluarga) + koma + ruang angkasa + kolom pertama (Nama depan). Jangan ragu untuk mengubahnya menjadi apa pun yang Anda inginkan.
Terkadang mengganti semua contoh kata tertentu, atau beberapa kata acak, bukanlah yang kita butuhkan. Mungkin kita perlu melakukan penggantian jika ditemukan kecocokan terpisah.
Misalnya, kita mungkin ingin mengganti Mulailah dengan berhenti hanya jika kata services ditemukan pada baris yang sama. Dalam skenario itu, inilah yang akan terjadi:
Kita harus mulai berpesta di tempat kerja, tetapi ingatlah untuk memulai semua layanan terlebih dahulu.
Pada baris pertama, Mulailah tidak akan tergantikan dengan berhenti karena kata layanan tidak muncul di baris itu, sebagai lawan dari baris kedua.
# sed '/services/s/start/stop/g' msg.txt.
Anda dapat menggabungkan dua atau lebih substitusi satu tunggal sed memerintah. Mari kita ganti kata that dan line in file saya.txt dengan Ini dan ayat, masing-masing.
Perhatikan bagaimana ini bisa dilakukan dengan menggunakan biasa sed perintah substitusi diikuti oleh titik koma dan perintah substitusi kedua:
# sed -i 's/that/this/gi; s/line/verse/gi' myfile.txt.
Tip ini diilustrasikan pada gambar berikut:
Tentu saja, sed dapat dikombinasikan dengan alat lain untuk membuat perintah yang lebih kuat. Sebagai contoh, mari kita gunakan contoh yang diberikan di TIPS #4 dan ekstrak alamat IP kami dari output rute ip
memerintah.
Kami akan mulai dengan mencetak hanya baris di mana kata src
adalah. Kemudian kita akan mengubah beberapa spasi menjadi satu. Akhirnya, kami akan memotong tanggal 9 bidang (mengingat satu spasi sebagai pemisah bidang), yang merupakan tempat alamat IP:
# ip rute menunjukkan | sed -n '/src/p' | sed -e 's/ */ /g' | potong -d' ' -f9.
Gambar di bawah ini mengilustrasikan setiap langkah dari perintah di atas:
Dalam panduan ini kami telah membagikan 15 sed tips dan trik untuk membantu Anda dengan tugas-tugas administrasi sistem harian Anda. Apakah ada tip lain yang Anda gunakan secara rutin dan ingin dibagikan kepada kami dan komunitas lainnya?
Jika demikian, jangan ragu untuk memberi tahu kami menggunakan formulir komentar di bawah. Pertanyaan dan komentar juga diterima – kami berharap dapat mendengar dari Anda!
Jangan Lewatkan:Menguasai Perintah 'Awk' Linux dengan Tips dan Trik