Dari Bahasa Pemrograman Awk
Fungsi
sub ( r, s , t )
pertama menemukan substring terpanjang
paling kiri yang cocok dengan ekspresi regulerr
dalam target
stringt
; itu kemudian menggantikan substring dengan substitusi
strings
.Fungsi
sub(r,s)
adalah sinonim untuksub(r,s,$0)
.Di
sub ( /ana/, "anda" , "banana" )
, misalnya,banana
diganti denganbandada
.
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