Menggunakan Perintah Sed dan Grep di Terminal
mrfdn.com - Hari ini saya belajar tentang cara menggunakan perintah sed dan grep untuk mengganti text tertentu pada beberapa file sekaligus.
Perintah sed adalah perintah regular expression yang mana penggunaannya lebih advance dibandingkan perintah linux pada umumnya.
Jadi saya memiliki ratusan file artikel dalam format markdown .md
.
Kemudian saya ingin menghapus beberapa text tertentu sekaligus. Sebenarnya cara ini juga bisa dilakukan dengan mudah menggunakan text editor VSCODE atau lainnya, tapi akan terasa lebih fun jika dilakukan di Terminal.
Sebelum benar-benar mengeksekusi file sebenarnya, saya mencobanya pada file dummy terlebih dahulu untuk mencegah resiko yang lebih besar.
Ini yang saya ingin lakukan :
Mencari file menggunakan perintah grep
Saya ingin mencari text tertentu bernama .html
pada folder yang berisi list file markdown. Perintah yang saya masukkan :
grep -rF .html
Maka hasilnya akan memunculkan semua text dengan highlight .html
.
Perintah di atas juga bisa dilakukan dengan
fgrep -r .html
Kemudian untuk menghitung berapa jumlah kata .html
yang ditemukan, lakukan pipe dengan perintah berikut :
grep -rF .html | wc -l
atau
fgrep -r .html | wc -l
Setelah memastikan benar text tertsebut yang ingin diganti, lakukan replace dengan perintah sed
.
Istilah replace di unix juga dikenal dengan Subtitute
Melakukan find and replace atau subtitute dengan perintah sed di terminal
Selanjutnya saya ingin menghapus text .html
yang ada di setiap file markdown yang ada di folder artikel tertentu. Cukup jalankan perintah ini :
cs artikel
sed -i '' -e 's/.html//g' *.md
Selain cara di atas, regular expression di atas bisa dijalankan dengan mengganti /
menjadi |
. Jadi command seperti ini :
cd artikel
sed -i '' -e 's|.html||g' *.md
sed -i '' -e 's+.html++g' *.md
Sangat disarankan menggunakan cara ke-2 yang menggunakan pipe atau +. Misalnya, anda ingin mengganti text yang terdapat /
di dalamnya contoh (https://www), maka //
tersebut akan terbaca sebagai command sed.
Maka dengan menggunakan pipe perintah sed untuk kondisi di atas pun bisa dijalankan.
Mengganti / menghapus incremental character sekaligus dengan sed
Saya ingin menghapus text :
#url: /2018/03/
menjadi
#url: /
Sekaligus pada beberapa file .md. Jadi perintah yang saya masukkan adalah seperti ini :
sed -i '' -e '/^#url: /s@/…./../@/@' *.md
Maka hasilnya akan seperti ini :
Jadi karena karakter tahun dan bulan berbeda-beda tiap file, maka kita bisa menggunakan . untuk menentukan seberapa banyak karakter yang ingin diganti.
Demikian tips menggunakan regular expression sed dan grep. Semoga bermanfaat.
Referensi :