Berikut skenarionya. Anda memiliki string besar dan Anda ingin mengganti sebagiannya dengan string lain.
Misalnya, Anda ingin mengubah "Saya menulis satu baris hari ini " ke "Saya sedang menulis satu baris sekarang ".
Dalam tutorial singkat ini, saya akan menunjukkan cara mengganti substring secara native di Bash. Saya juga akan menunjukkan contoh perintah sed sebagai ekstensi.
Ganti substring secara native di bash (baik untuk satu baris)
Bash memiliki beberapa metode bawaan untuk manipulasi string. Jika Anda ingin mengganti bagian dari string dengan yang lain, begini caranya:
${main_string/search_term/replace_term}
Buat variabel string yang terdiri dari baris:“Saya menulis baris hari ini” tanpa tanda kutip lalu ganti today
dengan now
:
[email protected]:~$ line="I am writing a line today"
[email protected]:~$ echo "${line/today/now}"
I am writing a line now
Apakah Anda mengerti apa yang baru saja terjadi? Dalam sintaks "${line/today/now}"
, baris adalah nama variabel tempat saya baru saja menyimpan seluruh kalimat. Di sini, saya menginstruksikan untuk mengganti kemunculan pertama dari kata today
dengan now
. Jadi, alih-alih menampilkan konten variabel asli, itu menunjukkan baris dengan kata yang diubah.
Oleh karena itu, line
variabel tidak benar-benar berubah. Masih sama:
[email protected]:~$ echo $line
I am writing a line today
Tapi Anda pasti bisa mengganti kata yang Anda inginkan dan memodifikasi variabel yang sama untuk membuat perubahan permanen:
[email protected]:~$ line="${line/today/now}"
[email protected]:~$ echo $line
I am writing a line now
Sekarang perubahan telah dibuat permanen dan begitulah cara Anda dapat mengganti kemunculan pertama substring dalam string secara permanen.
Anda juga dapat menggunakan variabel lain untuk menyimpan substring tertentu yang ingin Anda ganti:
[email protected]:~$ replace="now"
[email protected]:~$ replacewith="today"
[email protected]:~$ line="${line/${replace}/${replacewith}}"
[email protected]:~$ echo $line
I am writing a line today
Di sini, saya menyimpan kata yang akan diganti dalam variabel yang disebut replace
dan kata yang akan diganti dengan di dalam replacewith
. Setelah itu, saya menggunakan metode yang sama seperti yang dibahas di atas untuk "merevisi" baris. Sekarang, perubahan yang saya buat di awal tutorial ini telah dikembalikan.
Mari kita lihat contoh lain:
[email protected]:~$ hbday="Happy Birthday! Many Many Happy Returns!"
[email protected]:~$ hbday="${hbday/Many/So Many}"
[email protected]:~$ echo $hbday
Happy Birthday! So Many Many Happy Returns!
Mengganti semua kemunculan substring
Anda juga dapat mengganti beberapa kemunculan substring di dalam string. Mari kita lihat melalui contoh lain:
[email protected]:~$ hbday="${hbday//Many/So Many}"
[email protected]:~$ echo $hbday
Happy Birthday! So Many So Many Happy Returns!
/
tambahan itu setelah hbday
membuatnya menggantikan semua kemunculan Many
dengan So Many
di dalam kalimat.
Ganti string menggunakan perintah sed (dapat bekerja pada file juga)
Berikut cara lain untuk mengganti substring dalam string di bash. Gunakan perintah sed dengan cara ini:
Ganti kemunculan pertama:
line=$(sed "s/$replace/s//$replacewith/" <<< "$line")
Jika saya mengambil contoh pertama, itu dapat dimainkan sebagai:
Anda juga dapat mengganti semua kemunculan dengan menambahkan g
di akhir:
line=$(sed "s/$replace/$replacewith/g" <<< "$line")
Sekarang, Anda mungkin berpikir ini lebih rumit daripada metode string bash asli. Mungkin, tetapi sed sangat kuat dan Anda dapat menggunakannya untuk mengganti semua kemunculan string dalam file.
sed -i 's/$replace/$replacewith/' filename
Berikut contoh beberapa buku Agatha Christie dengan judul 'Murder':
[email protected]:~$ cat agatha.txt
The Murder in the Vicarage
Murder in Mesopotamia
Murder is Easy
Murder on the Orient Express
Murder In Retrospect
Saya akan mengganti Pembunuhan dengan Pernikahan karena beberapa orang berpikir keduanya sama:
sed -i "s/Murder/Marriage/g" agatha.txt
Dan inilah file yang diubah sekarang:
The Marriage in the Vicarage
Marriage in Mesopotamia
Marriage is Easy
Marriage on the Orient Express
Marriage In Retrospect
Sed adalah alat yang sangat kuat untuk mengedit file teks di Linux. Anda setidaknya harus mempelajari dasar-dasarnya.
Apakah Anda senang membaca artikel ini? Jika Anda memiliki sesuatu untuk dibagikan tentang mengganti string atau artikel ini, silakan lakukan di komentar di bawah.