Menggunakan Perintah Sed dan Grep di Terminal

JagoTekno – 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: /[email protected]/…./../@/@' *.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 :

  • https://www.cyberciti.biz/faq/how-to-use-sed-to-find-and-replace-text-in-files-in-linux-unix-shell/
  • https://www.gnu.org/software/sed/manual/sed.html

Tinggalkan komentar