Merge pull request #21 from guspur/master
[debian-id-ebook.git] / src / stream-dan-sed.rst
bloba96b867af7465e7b6283f7ef9a370dbbc8e513f3
1 ==============
2 Stream dan Sed
3 ==============
6 Piping dengan Notasi "|"
7 ========================
9 'Piping' merupakan utility GNU/Linux yang dapat digunakan untuk mengarahkan sebuah output perintah menjadi masukan bagi perintah yang lain.
11 .. figure:: images/stream/konsep-piping.jpg
13    *Konsep piping*
16 **Contoh 1:**
20    ~# cat databaru >> dataku | more dataku
21    ::::::::::::::
22    dataku
23    ::::::::::::::
24    Saat ini kami sedang belajar
25    penggunaan redirection untuk standard input
26    sehingga inputan bukan dari standard output
27    seperti keyboard melainkan dari file text
28    ASSalamu alaikum Wr. Wb.
29    Hello....
30    Saat ini Saya Sedang belajar
31    command line Unix/GNU/Linux
32    haruS berSabar memang untuk
33    mempelajarinya. Ehehehe....
35 Pada contoh di atas, output perintah ``cat`` akan menjadi masukan bagi perintah ``more``.
38 **Contoh 2:**
40 Penulis ingin mencari kata 'elektronik' pada sebuah file text 'bertanya yang baik.txt'. Secara logika kita dapat mencarinya secara manual dengan membuka file text tersebut terdahulu. Tapi jika jumlah kalimat pada file sangat banyak, maka pasti kita akan kerepotan sendiri mencarinya. Dengan bantuan 'piping' yang digabungkan dengan perintah ``grep``, pencarian kata tersebut akan sangat mudah.
44    ~# cat bertanya\ yang\ baik.txt | grep elektronik | more
46 Output program di atas::
48    Tidak ada yang tahu jawabannya bukan berarti Anda diabaikan, walaupun memang 
49    sulit untuk membedakannya (karena sifat komunikasi elektronik yang faceless).
51 Selain menampilkannya ke layar komputer, anda juga dapat mengarahkan hasil pencarian tersebut ke file text lain dengan menggunakan redirection ">".
55    ~# cat bertanya\ yang\ baik.txt | grep elektronik > elektronik.txt
56    ~# more elektronik.txt
58 Output program di atas::
60    Tidak ada yang tahu jawabannya bukan berarti Anda diabaikan, walaupun memang 
61    sulit untuk membedakannya (karena sifat komunikasi elektronik yang faceless)
64 **Contoh 3:**
68    $ tr 'A-Z' 'a-z' < bertanya\ yang\ baik.txt | tr –cs 'a-z' '\n' | sort | 
69    uniq > bertanya.txt
71 Pada contoh di atas, dapatkah anda membayangkan output dari perintah tersebut. Jika melihat perintah tersebut mungkin pembaca pemula akan sedikit pusing melihatnya, namun cukup sederhana. Mari kita lihat secara terpisah dari penggabungan beberapa perintah:
73 **tr 'A-Z' 'a-z' < bertanya\\ yang\\ baik.txt** – akan mengganti semua huruf kapital menjadi huruf kecil pada file text 'bertanya yang baik.text'.
75 **tr -cs 'a-z' '\\n'** – akan memenggal setiap kata ke baris baru
77 **sort** – akan mengurutkan kata-kata tersebut sesuai abjad (a-z)
79 **uniq** – akan menghilangkan salah satu kata yang sama
81 sehingga output dari perintah di atas adalah::
83    ada
84    adalah
85    agar
86    ah
87    akan
88    akunting
89    alasan
90    alih
91    am
92    amburadul
93    ampun
94    anda
95    aneh
96    anggota
97    apa
98    apakah
99    arsip
100    asal
101    ask
102    asumsikan
103    at
104    atau
105    ayang
106    baca
107    bagaimana
108    bagi
109    bahasa
110    bahkan
111    bahwa
112    baik
113    balasan
114    balasannya
115    balik
116    bantuan
117    banyak
118    bayar
119    bayaran
120    beberapa
121    begini
122    beginian
123    bekerja
124    bekerjasama
125    belum
126    .
127    .
128    .
129    dst.
130    .
131    .
132    .
133    webmaster
134    website
135    www
136    x
137    xt
138    xxx
139    ya
140    yang
142 **tee** – Membaca informasi dari standar input kemudian menuliskannya ke standar output. Perintah ``tee`` ini biasanya digunakan di tengah-tengah pipeline.
144 .. figure:: images/stream/konsep-tee.jpg
146    *Konsep tee*
149 Misal::
151    $ ps aux | tee data.txt | more
152    USER  PID   %CPU  %MEM  VSZ   RSS   TTY   STAT  START  TIME  COMMAND
153    root  1     0.0   0.2   1492  460   ?     S     11:02  0:00  init [2]
154    root  2     0.0   0.0   0     0     ?     S     11:02  0:00  [keventd]
155    root  3     0.0   0.0   0     0     ?     SN    11:02  0:00  [ksoftirqd_CPU0]
156    root  4     0.0   0.0   0     0     ?     S     11:02  0:00  [kswapd]
157    root  5     0.0   0.0   0     0     ?     S     11:02  0:00  [bdflush]
158    root  6     0.0   0.0   0     0     ?     S     11:02  0:00  --More--
160 Pada contoh di atas, output perintah ``ps aux`` selain di simpan ke dalam file text 'data.txt' juga akan ditampilkan ke layar komputer oleh perintah ``more``.
163 Quote
164 =====
166 Terkadang command line Unix/GNU/Linux dapat membuat kita putus asa dan menyebalkan. Sebagai contoh penggunaan karakter-karakter aneh seperti $, \*, &, \\, \?. Namun, jika telah terbiasa maka penggunaan karakter-karakter tersebut bukan merupakan sesuatu yang sangat mengerikan. Bahkan penggunaannya dapat mempermudah melakukan aktivitas pada mode teks.
168 Pada *bash shell*, karakter \* dan \? merupakan wildcard dan $ berarti variabel. Pada sub bab ini penulis mencoba menjelaskan qoute ('', \*, \\, \\\\) yang dapat digunakan untuk mempermudah saat bekerja di lingkungan mode teks GNU/Linux.
170 **Contoh 1:**
174    $ cat 'data baru aku.txt'
175    kari  1018 0.0 0.3 1772  616 pts/1 T  13:00 0:00 more
176    kari  1020 0.0 0.3 1772  632 pts/1 T  13:00 0:00 more data.txt
177    kari  1023 0.0 0.3 1772  620 pts/1 T  13:01 0:00 more
178    kari  1026 0.0 0.3 1772  616 pts/1 T  13:01 0:00 more
179    kari  1029 0.0 0.3 1772  620 pts/1 T  13:02 0:00 more
180    kari  1033 0.0 0.5 2480  840 pts/1 R+ 13:02 0:00 ps aux
181    kari  1034 0.0 0.2 1484  396 pts/1 R+ 13:02 0:00 tee data.txt
182    kari  1035 0.0 0.9 2544 1460 pts/1 R+ 13:02 0:00 /bin/bash
184 Lihat betapa pentingnya penggunaan qoute ini. Jika tidak menggunakan quote (''), perintah ``cat`` akan mencoba menampilkan tiga file yang berbeda yakni: data.txt, baru.txt, aku.txt.
187 **Contoh 2:**
191    $ rm –rf 'data*.txt'
193 akan menghasilkan hasil berbeda dengan perintah berikut::
195    ~$ rm –rf data*.txt
197 Pada contoh kedua di atas, file text yang cocok dengan \*data\*\* seperti data.txt, dataku.txt, databaruku.txt, dll akan terhapus.
200 Proses Input dan Output
201 =======================
203 Hubungan antara sebuah program dan sumber informasinya dan kontrol disebut dengan standar input. Jika bukan sebuah program, maka standar input defaultnya adalah keyboard. Secara default, standar output dan error biasanya menuju ke terminal atau layar komputer.
205 Jika sebuah program atau perintah tereksekusi dengan benar, maka hasil dari eksekusinya akan ditampilkan ke terminal (standar output 1) jika tidak dilakukan penginisialisasian standar output. Sebaliknya, jika eksekusi program gagal, maka akan menuju ke standar error 2 (default: terrminal).
207 .. figure:: images/stream/proses-input-output.jpg
209    *Proses input output*
211 Sebagai contoh, jika terdapat sebuah file dengan nama data.txt yang berisi 5 buah nama yang tidak tersusun secara berurut, maka untuk menampilkan isi file tersebut secara berurut dapat menggunakan perintah ``sort``.
215    $ sort data.txt
218 .. Note::
220    data.txt merupakan masukan (input) bagi perintah ``sort`` sedangkan outputnya
221    menuju ke terminal komputer.
224 Output Redirection
225 ==================
227 Pada sistem GNU/Linux, keluaran (output) dari sebuah perintah secara default akan menuju ke terminal. Namun, keluaran sebuah perintah dapat dialihkan ke sebuah file dan proses ini disebut output redirection.
229 Output redirection dinotasikan dengan '>' atau '>>' seperti yang tampak pada gambar berikut.
231 .. figure:: images/stream/redirection.jpg
233    *Redirection standard output*
235 Output redirection ini banyak digunakan untuk:
237 -  Menyalin hasil/error ke sebuah file untuk disimpan secara permanen.
238 -  Menyalin hasil/error ke printer untuk mendapatkan sebuah dokumentasi dalam bentuk hardcopy.
239 -  Mengkombinasikan dua buah perintah sehingga dapat digunakan secara bersamaan.
242 Karakter yang digunakan oleh operator output redirection:
244 **Karakter operator output redirection:**
246 +---------------+-------------------------------------------------------------------+
247 |  Karakter     |          Fungsi                                                   |
248 +===============+===================================================================+
249 |      >        | Mengirimkan output (redirection) ke sebuah file atau perangkat    |
250 |               | output yang lain (misal: printer, display monitor, dll).          |
251 |               | Jika file tersebut sudah ada, maka secara otomatis akan ditimpah. |
252 +---------------+-------------------------------------------------------------------+
253 |     >>        | Fungsinya sama Redirection ini memiliki fungsi yang sama dengan   |
254 |               | redirection pertama. Namun redirection tidak akan menimpah file   |
255 |               | yang telah ada sebelumnya.                                        |
256 +---------------+-------------------------------------------------------------------+
259 Penggunaan Karakter ">"
260 -----------------------
262 Anda ingin menyalin sebuah string ke sebuah file (data.txt) dengan kata kunci 'ltmodem' yang terdapat pada sebuah file ``ltmodem.abw``. Perintah yang digunakan adalah::
264    $ grep 'ltmodem' /home/kari/ltmodem.abw > data.txt
265    $ more data.txt
267 Contoh lain:
269 Perintah ``ls –alF`` akan menampilkan seluruh file atau direktori di mana anda bekerja saat ini.
273    $ ls –alF > data.txt
275 Perintah di atas akan menampilkan output dari perintah ``ls -alF`` pada file data.txt
276 Selain *output redirection* '>' mengarahkan keluarannya ke *output* standar berupa *file* atau terminal. *Output redirection* ini juga dapat digunakan untuk mengarahkan output ke perangkat/device.
278 .. figure:: images/stream/standar-output.jpg
280    *Standar output menuju speaker*
283 Misal::
285    $ cat sound.wav > /dev/audio
287 Perintah di atas akan menghasilkan suara 'sound.wav' pada *speaker* anda. Perintah tersebut sering digunakan untuk memeriksa apakah *soundcard* komputer telah berjalan dengan baik.
290 Penggunaan Karakter ">>"
291 ------------------------
293 Sedangkan penggunaan karakter ">>" dapat anda perhatikan perbedaan dari *output* yang dihasilkan.
297    $ grep 'ltmodem' /home/kari/ltmodem.abw >> data.txt
298    $ more data.txt
301 .. Note::
303    Pada contoh di atas terlihat bahwa *output* dari perintah sebelumnya akan 
304    ditambahkan pada bagian akhir dari kalimat tersebut (terulang 2x).
307 Input redirection
308 =================
310 *Input redirection* adalah masukan perintah dapat diarahkan dari sebuah file dan dinotasikan dengan '<'.
312 .. figure:: images/stream/input-redirection.jpg
314    *Input redirection dari sebuah file*
317 Penggunaan Karakter "<"
318 -----------------------
320 Secara *default* standar input membaca informasi masukan dari keyboard, tapi sebenarnya standar input juga dapat menerima masukan dari file text biasa.
322 Misal::
324    $ cat < dataku
325    Saat ini kami sedang belajar
326    penggunaan redirection untuk standar input
327    sehingga masukan bukan dari standar input
328    seperti keyboard melainkan dari file text
330 Pada contoh di atas perintah 'cat' akan membaca informasi masukan dari sebuah *file* yakni "dataku" dan menampilkannya ke layar komputer.
332 *Input/output redirection* '<', '>' atau '>>' dapat digabungkan penggunaannya satu dengan yang lain.
334 Misal::
336    $ cat <dataku>> databaru
337    $ more databaru
338    ASSalamu alaikum Wr. Wb.
339    Hello....
340    Saat ini Saya Sedang belajar
341    command line Unix/GNU/Linux
342    haruS berSabar memang untuk
343    mempelajarinya. ehehehe....
344    Saat ini kami sedang belajar
345    penggunaan redirection untuk standar input
346    sehingga masukan bukan dari standar input
347    seperti keyboard melainkan dari file text
349 Perintah di atas akan membaca informasi masukan dari *file* "dataku" kemudian *output* akan diarahkan ke *file* "databaru". Karena "databaru" telah terdapat sebuah teks, maka penulis menggunakan *redirection* '>>' agar teks sebelumnya tidak tertimpa oleh teks baru.
352 Standar kesalahan (error) menuju sebuah file
353 ============================================
355 Secara *default* standar *error* biasanya diarahkan ke terminal komputer. Namun, pengguna juga dapat mengarahkannya ke sebuah *file*. Untuk *bash shell* yang umum digunakan pada GNU/linux menggunakan notasi **2>&1**.
357 .. figure:: images/stream/standar-error.jpg
359    *Standar error ke sebuah file*
362 Misal::
364    $ ls –l askari > output 2>&1
367 Sed – stream editor
368 ===================
370 ``Sed`` merupakan *utility* unix yang dapat digunakan untuk mengganti teks atau *string* dengan *string* atau teks lain pada sebuah *file*.
374    $ cat <file> | sed –e 's/<text yang dicari>/<text pengganti>/<option>' > <fileakhir>
376 Misal::
378    $ cat > data
379    Assalamu Alaikum Wr. Wb.
380    Hello....
381    saat ini saya sedang belajar
382    command line Unix/GNU/Linux
383    harus bersabar memang
384    untuk mempelajarinya. Ehehehe....
387 ^C (tekan ctrl-C)
390 Selanjutnya huruf "s kecil" yang terdapat pada kalimat di atas akan diganti dengan huruf "S besar". Kemudian dengan menggunakan *redirection* yang telah dijelaskan sebelumnya, maka *file* perubahan akan disimpan dengan nama *file* baru yaitu "databaru".
394    $ cat data | sed –e 's/s/S/g' > databaru
395    $ more databaru
396    ASSalamu alaikum Wr. Wb.
397    Hello....
398    Saat ini Saya Sedang belajar
399    command line Unix/GNU/Linux
400    haruS berSabar memang untuk
401    mempelajarinya. Ehehehe....