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 spesial, seperti $(), lalu pelajari loop (for,
while, dsb)

Di google banyak tutorial, jadi kalau man pagenya tidak jelas, jangan
menyerah di man page.

Whuah... lengkap banget... Okeh Pak Yohanes, langsung saya print dan saya pelajari, saya bookmark jugak di udeystar.tumblr.com

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

Kirim email ke