Iklan

Dua dari utilitas Linux yang paling tidak dihargai secara kriminal adalah Sed dan Awk. Meskipun diakui mereka bisa tampak agak misterius, jika Anda harus membuat perubahan berulang-ulang ke potongan besar kode atau teks, atau jika Anda harus menganalisis beberapa teks, Sed dan Awk sangat berharga.

Jadi, apakah mereka? Bagaimana mereka digunakan? Dan bagaimana, ketika digabungkan bersama, apakah mereka membuatnya lebih mudah untuk memproses teks?

Apa itu Sed?

Sed dikembangkan pada tahun 1971 di Bell Labs, oleh pelopor komputasi legendaris Lee E. McMahon.

Namanya adalah singkatan editor aliran, dan itulah yang dilakukannya. Ini memungkinkan Anda untuk mengedit badan atau aliran teks secara terprogram, melalui bahasa pemrograman yang ringkas dan sederhana, namun Turing-lengkap.

Cara kerjanya sederhana: ia membaca teks, baris demi baris menjadi buffer. Untuk setiap baris, itu akan melakukan instruksi yang telah ditentukan, jika berlaku.

Misalnya, jika seseorang menulis skrip Sed yang menggantikan kata "bir" dengan "soda", dan kemudian mengirimkannya dalam file teks yang berisi seluruh lirik "99 Botol Bir di Dinding", itu akan melalui file itu secara garis demi garis, dan mencetak "99 Botol Soda di Dinding", dan sebagainya di.

instagram viewer

Script Sed yang paling dasar adalah Hello World. Di sini, kami menggunakan utilitas Unix Echo, yang hanya menghasilkan string, untuk mencetak "Hello World". Tapi kami menyalurkannya ke Sed, dan mengatakannya untuk mengganti "Dunia" dengan "Dave". Cukup jelas.

gema "Hello World" | sed s / world / Dave
sedawk-dave

Anda juga dapat menggabungkan instruksi Sed ke dalam file, jika Anda perlu melakukan pengeditan yang lebih rumit. Terinspirasi oleh utas Reddit yang lucu ini, Saya akan membawa lirik ke A-Ha Ambillah Aku, dan ganti setiap instance dari "Aku", "Aku", dan "Aku", dengan Greg.

Pertama, saya akan menempatkan lirik ke lagu dalam file teks bernama tom.txt. Kemudian saya akan membuka editor teks pilihan saya (saya favoritnya adalah Vim 7 Alasan Teratas Untuk Memberi Vim Text Editor KesempatanSelama bertahun-tahun, saya sudah mencoba satu editor teks demi satu. Sebut saja, saya mencobanya. Saya menggunakan setiap editor ini selama lebih dari dua bulan sebagai editor utama saya sehari-hari. Entah bagaimana, aku ... Baca lebih banyak tapi Nano nano vs. vim: Editor Teks Terminal DibandingkanMeskipun Linux telah menjadi cukup mudah bagi siapa saja untuk digunakan tanpa harus menggunakan Terminal, ada beberapa dari kita yang secara teratur menggunakannya atau ingin tahu tentang bagaimana seseorang dapat mengendalikan ... Baca lebih banyak dan Gedit gedit: Salah Satu Editor Teks Biasa Berisi Penuh Fitur [Linux & Windows]Ketika Anda memikirkan editor teks biasa, hal pertama yang mungkin muncul di kepala Anda adalah aplikasi Notepad Windows. Itu tidak persis apa yang dinyatakan deskripsi tugasnya - fitur polos untuk teks biasa ... Baca lebih banyak keduanya pilihan yang sangat baik), dan tambahkan baris berikut. Pastikan file yang Anda buat berakhir dengan .sed.

sed-greg-sed

Anda mungkin memperhatikan bahwa dalam contoh di atas, saya mengulangi diri saya sendiri (mis. S / me / Greg / dan s / Me / Greg /). Itu karena beberapa versi Sed, seperti yang dikirimkan dengan Mac OS X, lakukan tidak mendukung pencocokan case-insensitive. Akibatnya, kita harus menulis dua instruksi Sed untuk setiap kata, sehingga ia mengenali versi huruf besar dan kecil.

Ini tidak akan bekerja dengan sempurna, seolah-olah Anda telah mengganti setiap instance dari "Saya", "Saya", dan "Saya" dengan tangan. Ingat, kami hanya menggunakan ini sebagai latihan untuk menunjukkan bagaimana Anda dapat mengelompokkan instruksi Sed ke dalam satu skrip, dan kemudian menjalankannya dengan satu perintah.

Kemudian, kita perlu memanggil file. Untuk melakukan itu, kami menjalankan perintah ini.

cat tom.txt | sed -f greg.sed

Mari kita memperlambat dan melihat apa yang dilakukannya. Para pembaca yang bermata elang akan memperhatikan kita tidak menggunakan Echo di sini. Kami menggunakan Cat. Itu karena sementara Cat akan mencetak seluruh isi file, gema hanya akan mencetak nama file. Anda juga akan memperhatikan bahwa kami menjalankan Sed dengan bendera "-f". Ini memberitahukannya untuk membuka skrip sebagai file.

Hasil akhirnya adalah ini.

skrip sed-greg

Perlu dicatat bahwa Sed mendukung ekspresi reguler (REGEX). Ini memungkinkan Anda untuk mendefinisikan pola dalam teks, menggunakan sintaksis khusus dan rumit.

Berikut ini contoh cara kerjanya. Kami akan mengambil lirik lagu yang disebutkan di atas, tetapi gunakan regex untuk mencetak setiap baris itu tidak Mulailah dengan "Ambil".

cat tom.txt | sed / ^ Ambil / d
sed-regex-take

Sed, tentu saja, sangat berguna. Tetapi itu bahkan lebih kuat ketika dikombinasikan dengan Awk.

Apa itu Awk?

Awk, seperti Sed, adalah bahasa pemrograman yang dirancang untuk menangani teks dalam jumlah besar. Tetapi sementara Sed digunakan untuk memproses dan memodifikasi teks, Awk sebagian besar digunakan sebagai alat untuk analisis dan pelaporan.

Seperti Sed, Awk pertama kali dikembangkan di Bell Labs pada 1970-an. Namanya tidak berasal dari program apa tidak, melainkan nama keluarga masing-masing penulis - Alfred Aho, Peter Weinberger, dan Brian Kernaghan.

Awk bekerja dengan membaca file teks atau input stream satu baris setiap kali. Setiap baris dipindai untuk melihat apakah cocok dengan pola yang telah ditentukan. Jika kecocokan ditemukan, suatu tindakan dilakukan.

Tetapi sementara Sed dan Awk dapat berbagi tujuan yang sama, mereka dua bahasa yang sama sekali berbeda, dengan dua filosofi desain yang sama sekali berbeda. Awk lebih mirip beberapa bahasa tujuan umum Cara Memilih Bahasa Pemrograman Untuk Belajar Hari Ini & Dapatkan Pekerjaan Hebat Dalam 2 TahunDiperlukan bertahun-tahun kerja keras untuk menjadi programmer yang benar-benar baik; jadi apakah ada cara untuk memilih bahasa yang tepat untuk memulai hari ini, agar dapat diterima besok? Baca lebih banyak , seperti C, Python dan Bash. Ini memiliki hal-hal seperti fungsi, dan pendekatan yang lebih mirip-C untuk hal-hal seperti iterasi dan variabel (James Bruce menjelaskan cara kerja iterasi Dasar-Dasar Mutlak Pemrograman Untuk Pemula (Bagian 2)Pada bagian 2 dari panduan pemula absolut kami untuk pemrograman, saya akan membahas dasar-dasar fungsi, mengembalikan nilai, loop, dan kondisional. Pastikan Anda sudah membaca bagian 1 sebelum menangani ini, di mana saya menjelaskan ... Baca lebih banyak ). Sederhananya, rasanya lebih seperti bahasa pemrograman.

Jadi, mari kita coba. Menggunakan lirik untuk Take On Me, kami akan mencetak semua baris yang lebih panjang dari 20 karakter.

awk 'length ($ 0)> 80' tom.txt panjang awk

Contoh selanjutnya saya sudah tanpa malu cribbed dari dokumentasi resmi Awk. Tetapi ini adalah contoh yang bagus tentang potensi bahasa yang kuat namun kecil ini. Ini juga merupakan demonstrasi besar tentang bagaimana hal-hal seperti iterasi dan variabel bekerja di dalamnya. Pertama, buat file bernama "WordCount.awk", dan tambahkan baris berikut.

{for (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {untuk (kata dalam freq) printf "% s \ t% d \ n", kata, freq [kata] }

Simpan, lalu jalankan dengan perintah berikut.

awk -f WordCount.awk tom.txt

awk-wordcount
Keren kan? Anda mungkin akan memperhatikan bahwa mereka tidak dalam urutan apa pun. Kamu bisa urutkan hasil menggunakan utilitas urutkan Unix. Tapi kami akan meninggalkan itu untuk hari lain. Kami akan membuatnya tetap sederhana.

Menggabungkan Dua

Awk dan Sed keduanya sangat kuat ketika digabungkan. Anda dapat melakukan ini dengan menggunakan pipa Unix. Itu adalah "|" bit antar perintah.

Mari kita coba ini: Kita akan mencantumkan semua baris di Take On Me yang memiliki lebih dari 20 karakter, menggunakan Awk. Lalu, kita akan menghapus semua garis yang dimulai "Mengambil". Bersama-sama, semuanya terlihat seperti ini:

awk 'length ($ 0)> 20' tom.txt | sed / ^ Ambil / d

Dan menghasilkan ini:

awk-length-sed

Sekarang mari kita balikkan. Kami akan mulai dengan menghapus semua baris yang dimulai dengan Take, dan kemudian pipa ke Awk, tempat kami akan menghitung berapa kali setiap kata muncul. Ini terlihat seperti ini:

cat tom.txt | sed / ^ Ambil / d | awk -f WordCount.awk
awk-wordcount-sed

Kekuatan Sed dan Awk

Hanya ada begitu banyak yang dapat Anda jelaskan dalam satu artikel. Tapi saya harap saya telah menggambarkan betapa Sed dan Awk yang sangat kuat itu. Sederhananya, mereka adalah pembangkit tenaga pemrosesan teks.

Jadi, mengapa Anda harus peduli? Yah, selain fakta bahwa Anda tidak pernah tahu kapan Anda perlu membuat perubahan yang dapat diprediksi dan berulang pada dokumen teks, Sed dan Awk sangat bagus untuk mem-parsing file log. Ini sangat berguna saat Anda mencoba men-debug masalah di server LAMP Anda Mendaftar untuk Hosting Web khusus SSH? Don't Worry - Mudah Menginstal Perangkat Lunak Web Apa PunTidak tahu apa-apa tentang mengoperasikan Linux melalui baris perintah yang kuat? Jangan khawatir lagi. Baca lebih banyak , atau melihat log akses Anda untuk melihat apakah server Anda telah diretas.

Apakah Anda menemukan penggunaan yang menarik untuk Sed dan Awk? Apakah ada utilitas Linux lain yang Anda rasa kurang dihargai? Beri tahu saya di komentar di bawah, dan kami akan mengobrol.

Matthew Hughes adalah pengembang dan penulis perangkat lunak dari Liverpool, Inggris. Dia jarang ditemukan tanpa secangkir kopi hitam pekat di tangannya dan sangat menyukai Macbook Pro dan kameranya. Anda dapat membaca blognya di http://www.matthewhughes.co.uk dan ikuti dia di twitter di @matthewhughes.