GNU/Linux >> Belajar Linux >  >> Linux

Mengganti Substring Dengan String Lain di Bash

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.


Linux
  1. Bash -c Dengan Parameter Posisi?

  2. Contoh Manipulasi Bash String – Panjang, Substring, Temukan dan Ganti

  3. Alias ​​​​dengan variabel di bash

  1. Bagaimana cara menulis beberapa baris string menggunakan Bash dengan variabel?

  2. Ganti kata dengan yang lain di bash

  3. Bash:tunggu dengan batas waktu

  1. tr perintah - cara mengganti string \n dengan baris baru yang sebenarnya (\n)

  2. Ganti spasi dengan garis bawah melalui BASH

  3. bash - temukan posisi indeks string dari substring