GNU/Linux >> Belajar Linux >  >> Linux

Di mana Mendapatkan String Baru Setelah Menjalankan `sub` Di Awk?

Dari Bahasa Pemrograman Awk

Fungsi sub ( r, s , t ) pertama menemukan substring terpanjang
paling kiri yang cocok dengan ekspresi reguler r dalam target
string t; itu kemudian menggantikan substring dengan substitusi
string s .

Fungsi sub(r,s) adalah sinonim untuk sub(r,s,$0) .

Di sub ( /ana/, "anda" , "banana" ) , misalnya, banana
diganti dengan bandada .

Setelah menjalankan sub ( r, s , t ) , bagaimana saya bisa mendapatkan string baru?
Misalnya, di sub ( /ana/, "anda" , "banana" ) , bagaimana saya bisa mendapatkan string baru bandada ?

Subfungsi mengembalikan jumlah pergantian yang dilakukan.

Apakah kembalinya sub entah 0 atau 1? Apakah benar tidak boleh lebih dari satu, karena sub hanya menemukan kecocokan pertama dan menggantinya?

Terima kasih.

Jawaban yang Diterima:

Dari manual awk GNU 9.1.3 Fungsi Manipulasi String:

… argumen ketiga untuk sub() harus berupa elemen variabel, bidang, atau larik
. Beberapa versi awk mengizinkan argumen ketiga menjadi ekspresi
yang bukan nilai. Dalam kasus seperti itu, sub() masih mencari
untuk pola dan mengembalikan nol atau satu, tetapi hasil substitusi
(jika ada) dibuang karena tidak ada tempat untuk meletakkan
itu. Versi awk tersebut menerima ekspresi seperti berikut:

sub(/USA/, "United States", "the USA and Canada")

Untuk kompatibilitas
historis, gawk menerima kode yang salah tersebut. Namun, menggunakan
objek lain yang tidak dapat diubah sebagai parameter ketiga menyebabkan kesalahan fatal
dan program Anda tidak akan berjalan.

Jadi, jawabannya adalah dengan menggunakan variabel:

awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana

Linux
  1. 4 Cara Agar Perintah Tetap Berjalan Setelah Anda Keluar Dari Sesi SSH

  2. Di mana Default Variabel Lingkungan Istilah Ditetapkan?

  3. Dapatkan Pelengkap Dari Hasil Perintah Ls?

  1. Bagaimana Cara Mendapatkan Tty Di Bash Yang Sedang Berjalan?

  2. Di mana fungsi itoa di Linux?

  3. Bagaimana saya bisa mendapatkan folder temp dari mesin yang menjalankan maven?

  1. Bagaimana saya bisa mendapatkan nomor terakhir dari string di bash?

  2. Di mana perintah permata di RHEL6?

  3. Dimana fork() pada fork bomb :(){ :|:&};:?