Re: [linux-programming] help bash script 2
Budy, Mungkin opini ini benar untuk 5 atau 10 tahun yang lalu, tapi jika kita melihat embedded systems sekarang, sudah makin jarang kita temukan system yang tidak mampu menjalankan high-level language. KOkon. 2010/1/8 Budy Wuysang nguik.gn...@gmail.com: 2010/1/9 Eko Prasetya eprase...@gmail.com: Di real world, kita menggunakan python atau high-level language lainnya :D Tentu saja dengan syarat system yg digunakan sanggup dan punya resource untuk python language lainnya. Kalau sudah masuk ke system embedded atau small memory system maka sangat kecil kemungkinan anda punya akses ke higher level language, contoh: busybox routers, nokia n810, dll -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis
Re: [linux-programming] help bash script 2
2010/1/6 Yohanes Nugroho yoha...@gmail.com: ---pemaparan lengkap dipotong--- 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 Kalau tujuannya memang memberi contoh dalam konteks penggunaan sed untuk substitusi ini adalah penjelasan yg ok. Sedikit koreksi untuk menggunakan regex untuk suffix substitution perlu menambahkan '\' sebelum '.' karena '.' berarti any single character echo $X | sed -e 's/\.txt/xls/' Kalau tidak menggunakan '\' maka nama file fooXtxt akan menjadi foo.xls Dalam real world scripting kadang perlu dioptimalkan juga, dalam hal ini bash punya builtin parameter expansion kalau untuk bashv2 (or later) ada $( file) pengganti $(cat file) X=1 mv ${X%.txt}.xls $($X).xls -- Berrylink™ - Makassar one stop BlackBerry® solution @Karebosi Link Blok J-66 -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis
Re: [linux-programming] help bash script 2
Di real world, kita menggunakan python atau high-level language lainnya :D Eko. 2010/1/8 Budy Wuysang nguik.gn...@gmail.com: Dalam real world scripting kadang perlu dioptimalkan juga, dalam hal ini bash punya builtin parameter expansion kalau untuk bashv2 (or later) ada $( file) pengganti $(cat file) -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis
Re: [linux-programming] help bash script 2
2010/1/9 Eko Prasetya eprase...@gmail.com: Di real world, kita menggunakan python atau high-level language lainnya :D Tentu saja dengan syarat system yg digunakan sanggup dan punya resource untuk python language lainnya. Kalau sudah masuk ke system embedded atau small memory system maka sangat kecil kemungkinan anda punya akses ke higher level language, contoh: busybox routers, nokia n810, dll -- Berrylink™ - Makassar one stop BlackBerry® solution @Karebosi Link Blok J-66 -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis
Re: [linux-programming] help bash script 2
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
Re: [linux-programming] help bash script 2
Yohanes Nugroho wrote, On 1/6/2010 3:39 PM: 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
Re: [linux-programming] help bash script 2
2010/1/6 gdeys...@gmail.com gdeys...@gmail.com: melanjutkan help bash script sebelumnya, saya mohon bimbingannya untuk dapat membuat bash prog yg secara bertahap sedang saya bikin. (1) aku ada file hasil bernama 1d dari less 1.txt | grep date 1d isi file 1d ini adalah : date - 2003-10-12-10:14pm Kemudian aku mo rubah file 1d menjadi hanya 2003-10-12-10 saja. Itu artinya akan menghapus [date - ] dan [:14pm] Kira2 pake apa yach ? bisa dicut, misalnya: echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d: cut pertama memotong dari spasi ke kanan, cut kedua memotong sebelum tanda : 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 (.*). (2) gimana cara merename sebuah file dengan menggunakan output dari sebuah command Ini kurang jelas, bisa diperjelas maksud pertanyaannya? -- Regards Yohanes http://yohan.es/ -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis
Re: [linux-programming] help bash script 2
Yohanes Nugroho wrote, On 1/6/2010 11:37 AM: 2010/1/6 gdeys...@gmail.com gdeys...@gmail.com: melanjutkan help bash script sebelumnya, saya mohon bimbingannya untuk dapat membuat bash prog yg secara bertahap sedang saya bikin. (1) aku ada file hasil bernama 1d dari less 1.txt | grep date 1d isi file 1d ini adalah : date - 2003-10-12-10:14pm Kemudian aku mo rubah file 1d menjadi hanya 2003-10-12-10 saja. Itu artinya akan menghapus [date - ] dan [:14pm] Kira2 pake apa yach ? bisa dicut, misalnya: echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d: cut pertama memotong dari spasi ke kanan, cut kedua memotong sebelum tanda : 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 cmiiw 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 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) (2) 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 -- Berhenti langganan: linux-programming-unsubscr...@linux.or.id Arsip dan info: http://linux.or.id/milis