Blog Posts » Linux » linux find and replace menggunakan regex (sed)
linux find and replace menggunakan regex (sed)
Ketika saya ingin menghapus semua package (sebut saja paket) yang telah ter-download misal di var/cache/apt/archives beserta dependency-nya sekaligus, saya ingin membuat skrip / otomatisasi nya berdasarkan langkah-langkah berikut:
1. Cari semua file ekstensi .deb
2. Ambil hanya nama paket nya. Misal file python3-gi-cairo_3.14.0-1_i386.deb nama paketnya adalah python3-gi-cairo. Diketahui bahwa nama paket file .deb (dari repositori resmi) adalah sebelum karakter _ (underscore) pertama.
3. Hapus menggunakan apt-get purge
Untuk saat ini saya belum menemukan cara yang paling cepat dan simple. Setelah browsing, saya menemukan command yang bisa mengakomodasi find and replace menggunakan regular-expression (regex) yaitu sed. kebetulan sed sudah built-in dan tidak perlu mengistall paket sed di linux.
Cara yang saya gunakan menurut saya belum sempurna namun setidaknya bisa berfungsi dengan baik
Berikut cara yang saya gunakan:
1. Cari semua file ekstensi .deb
[Textarea][RAW][Download]
- find . -type f -name '*.deb' > /tmp/paket.log
Keterangan:
Tentunya bisa anda ubah tanda "." sesuai direktori anda.
Tanda > untuk menyimpan hasil pencarian ke temporary paket.log, jika sudah ada file paket.log akan di-rewrite. kalau menggunakan tanda >> akan di-append atau ditambahkan setelah baris terakhir.
Contoh hasil pencarian yang tersimpan di paket.log:
[Textarea][RAW][Download]
- ./Downloads/catfish/python3-gi-cairo_3.14.0-1_i386.deb
- ./Downloads/catfish/python3-pexpect_3.2-1_all.deb
- ./Downloads/catfish/catfish_1.2.2-1_all.deb
- ./Downloads/ppp/libwvstreams4.6-base_4.6.1-7_i386.deb
- ./Downloads/ppp/wvdial_1.61-4.1_i386.deb
- ./Downloads/ppp/libwvstreams4.6-extras_4.6.1-7_i386.deb
- ./Downloads/ppp/libuniconf4.6_4.6.1-7_i386.deb
- ./Downloads/sk1/blt_2.5.3+dfsg-1_i386.deb
- ./Downloads/sk1/python-tk_2.7.8-2+b1_i386.deb
- ./Downloads/sk1/python-sk1-0.9.3_1debian_7.8_i386.deb
- ./Downloads/sk1/tk8.6-blt2.5_2.5.3+dfsg-1_i386.deb
- ./Downloads/build-essential/libalgorithm-diff-perl_1.19.02-3_all.deb
- ./Downloads/build-essential/g++_4%3a4.9.2-2_i386.deb
- ./Downloads/build-essential/build-essential_11.7_i386.deb
- ./Downloads/build-essential/libstdc++-4.9-dev_4.9.2-10_i386.deb
- ./Downloads/build-essential/dpkg-dev_1.17.27_all.deb
- ./Downloads/build-essential/libalgorithm-merge-perl_0.08-2_all.deb
- ./Downloads/build-essential/libalgorithm-diff-xs-perl_0.04-3+b1_i386.deb
- ./Downloads/build-essential/g++-4.9_4.9.2-10_i386.deb
2. Ambil hanya nama paket nya.
Misal pada baris pertama ./Downloads/catfish/python3-gi-cairo_3.14.0-1_i386.deb kita ambil teks python3-gi-cairo yaitu antara / (slash) dan _ (underscore).
Cara ini memanfaatkan regex pada command sed.
[Textarea][RAW][Download]
- sed -r 's/.+\/([^\/_]+)_.+\.deb/\1/g' /tmp/paket.log
Keterangan: opsi -r untuk mengaktifkan regex extended yaitu agar bisa menggunakan ?, +, dan grouping.
Hasilnya adalah:
[Textarea][RAW][Download]
- user@hostname:~$ sed -r 's/.+\/([^\/_]+)_.+\.deb/\1/g' /tmp/paket.log
- python3-gi-cairo
- python3-pexpect
- catfish
- libwvstreams4.6-base
- wvdial
- libwvstreams4.6-extras
- libuniconf4.6
- blt
- python-tk
- python-sk1-0.9.3
- tk8.6-blt2.5
- libalgorithm-diff-perl
- g++
- build-essential
- libstdc++-4.9-dev
- dpkg-dev
- libalgorithm-merge-perl
- libalgorithm-diff-xs-perl
- g++-4.9
3. Hapus menggunakan apt-get purge.
apt-get dengan opsi purge menghapus bersih paket beserta config-nya dari system.
[Textarea][RAW][Download]
- apt-get purge $(sed -r 's/.+\/([^\/_]+)_.+\.deb/\1/g' /tmp/paket.log)
Keterangan:
Perintah didalam perintah. http://askubuntu.com/questions/7404/can-i-run-a-command-within-another-command
Selain menggunakan apt-get bisa juga menggunakan dpkg, jika anda sudah terbiasa dengan dpkg. Dan yang pasti sesuaikan dengan distro masing-masing.
Jadi semua perintah diatas jika disatukan bisa seperti ini:
[Textarea][RAW][Download]
- find . -name '*.deb' > /tmp/paket.log && apt-get purge $(sed -r 's/.+\/([^\/_]+)_.+\.deb/\1/g' /tmp/paket.log)
Apakah anda punya cara yang lebih baik? silahkan berbagi di komentar
Terakhir dari saya. Do it at your own risk. Salam.
(admin.anggit.com)