2010/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 Karakter
kalau 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-12 > Metode -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 regex >>> gimana cara merename sebuah file dengan menggunakan output dari sebuah >>> command >>> >> >> Ini 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 command Jadi 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. -- Regards Yohanes http://yohan.es/ -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis