gdeys...@gmail.com
Wed, 06 Jan 2010 01:07:45 -0800
Yohanes Nugroho wrote, On 1/6/2010 3:39 PM:
Whuah... lengkap banget... Okeh Pak Yohanes, langsung saya print dan saya pelajari, saya bookmark jugak di udeystar.tumblr.com2010/1/6 gdeys...@gmail.com <gdeys...@gmail.com>:Sip, dah aku coba, agak bingung sih... klo kira2 bentuknya kek gini : date - 2003-10-12T02:12:45Z Bisa gak klo potongnya dengan cara 7 digit pertama (date - = 7digit) kemudian diambil pada digit ke 8-17 (2003-10-12 = digit ke 8-17) kemudian digit ke 18 sampe terakhir dihapus. Digit disini bisa diartikan sebagai Karakterkalau ingin memotong karakter ke x sampai ke y bisa pakai cut, misalnya: echo 'date - 2003-10-12T02:12:45Z' | cut -c 8-17 hasilnya: 2003-10-12Metode -f 3- itu artinya memotong pada karakter pertama berupa 3 pada 2003 hal ini gak masalah klo bash script dijalankan pada single command, nantinya saya mo melakukan banyak command, jd saya gak bisa menggunakan cara ini. dan -f 1 -d: adalah memotong karakter setelah : </cmiiw>bukan, cut itu bisa bekerja di beberapa mode. Mode yang penting: - cut dari karakter ke x - y (ini harusnya dah jelas) - cut field ke x-y. Dalam contoh echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d: Artinya, potong masukan di karakter spasi (-d' ' artinya pemisahnya adalah spasi). Waktu dipotong, hasilnya adalah: date - 2003-10-12-10:14pm Kita cuma ingin yang terakir saja (baris ke 3, dst) jadi kita pakai -f 3, hasilnya: echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' ' 2003-10-12-10:14pm Berikutnya kita mau membuang dari titk dua ke kanan, jadi sekarang kita pakai pemisah/delimiter ':'. Kali ini hasilnya dala 2003-10-12-10 14pm Karena kita hanya ingin yang pertama, maka kita perlu cut lagi: echo '2003-10-12-10:14pm' | cut -f 1 -d':' Sehingga jika digabung: echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d: Lalu masalah perintah, saya cuma memberi contoh untuk satu kasus jadi pakai echi. Kalau Anda punya file yang isinya semuanya baris tanggal ya tinggal diganti memakai cat. misalnya cat file | cut -c 8-18 hasilnya akan ke layar, atau cat file | cut -c 8-18 > file.txt Untuk belajar bash, cobalah menjalankan perintah sepotong2 untuk melihat hasilnya.Bisa dengan sed echo 'date - 2003-10-12-10:14pm' | sed -re 's/[^0-9]+([0-9\-]+).*/\1/g' Ini lebih reliable, misalnya ada spasi ekstra, masih bisa jalan. Ini bekerja dengan mengabaikan semua yang bukan digit di awal ([^0-9]+), lalu mengambil semua digit dan tanda - ([0-9\-]+) dan mengabaikan sisanya (.*).Whuah.. yg ini malah bikin saya tambah bingung :d dari man sed mengatakan : 'stream editor for filtering and transforming text' Whuah keknya bisa tuh.... tapi masih bingung jugak (doh)Iya ini memang lebih kompleks dengan regexgimana cara merename sebuah file dengan menggunakan output dari sebuah commandIni kurang jelas, bisa diperjelas maksud pertanyaannya?misal kek gini : less 1.txt 2008-01-12 > output trus output diatas digunakan untuk ren 1.xls 2008-01-12.xls artinya : ren 1.xls [output] dan command2 diatas dibuat dalam satu script atau satu baris commandJadi isi file 1.txt itu adalah "2008-01-12"? lalu mau rename 1.xls ke 2008-01-12? misalnya X adalah nama file (1.txt): bash$ X=1.txt bash$ mv "$(echo $X|sed -e 's/.txt/.xls/')" "$(cat $X|sed -e 's/$/.xls/')" $(xxx) gunanya mengeksekusi perintah x, misalnya jika isi file 1.txt adalah "hello.doc": cat $(cat 1.txt) pertama $(cat 1.txt) akan dieksekusi, hasilnya adalah "hello.doc" berikutnya: cat hello.doc akan dieksekusi Jadi perintah mv "$(echo $X|sed -e 's/.txt/.xls/')" "$(cat $X|sed -e 's/$/.xls/')" bisa dipecah jadi 3: - perintah mv itu sendiri diikuti 2 parameter - perintah "$(echo $X|sed -e 's/.txt/.xls/')" - perintah "$(cat $X|sed -e 's/$/.xls/')" Tapi pertama saya mengeset Xmenjadi 1.txt dengan X=1.txt perintah mv sudah jelas. Berikutnya kita lihat yang di dalam $(...) yang pertama echo $X|sed -e 's/.txt/.xls/' artinya filter X dengan sed. Perintah sed yang paling sederhana adalah untuk mereplace. Karena namanya .txt, kita mau ubah menjadi 1.xls. Anda bisa mencoba2 sendiri, misalnya: echo "ABC" | sed -e 's/A/X/' hasilnya jadi XBC Anda juga bisa memakai file: cat fileku | sed -e 's/A/X/' Jika ingin mengganti semua A bukan A pertama, tambahkan g (global) cat fileku | sed -e 's/A/X/g' Berikutnya: cat $X|sed -e 's/$/.xls/' tadi kita pakai echo, tapi sekarang kita pake cat karena ingin isi file 1.txt cat 1.txt|sed -e 's/$/.xls/' $ adalah akhir baris kita mau mengubah akhir baris menjadi .xls (menambah .xls di belakang). Jadi perintahnya menjadi: mv "$(echo $X|sed -e 's/.txt/.xls/')" "$(cat $X|sed -e 's/$/.xls/')" Kalau Anda punya banyak file text di satu direktori: for X in *.txt; do mv "$(echo $X|sed -e 's/.txt/.xls/')" "$(cat $X|sed -e 's/$/.xls/')"; done Kali ini saya bahas dengan detail karena lagi pengen aja :), tapi mohon Anda belajar dulu perintah2 dasar seperti sed, for, cat, dsb. Supaya lebih mudah, dan saya tidak perlu menjelaskan panjang lebar. Beberapa perintah dasar: cat head tail cut grep sed Pelajari juga karakter2 spesial, seperti $(), lalu pelajari loop (for, while, dsb) Di google banyak tutorial, jadi kalau man pagenya tidak jelas, jangan menyerah di man page.
Terima kasih semua, terima kasih juga buat penduduk milis ini...Nanti klo saya ketemu masalah seputar ini, saya boleh tanya lagi yach... (gak usah dijawab, dibatin saja)
-- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis