Menggunakan sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Dalam perintah sed, ^
karakter tersebut cocok dengan teks yang dimulai dengan $prefix
, dan $
teks yang cocok dengan yang berakhir dengan $suffix
.
Adrian Frühwirth membuat beberapa poin bagus dalam komentar di bawah, tetapi sed
untuk tujuan ini bisa sangat berguna. Fakta bahwa isi $ awalan dan $ akhiran ditafsirkan oleh sed bisa baik atau buruk - selama Anda memperhatikan, Anda harus baik-baik saja. Keindahannya adalah, Anda dapat melakukan sesuatu seperti ini:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
yang mungkin apa yang Anda inginkan, dan lebih bagus dan lebih kuat daripada substitusi variabel bash. Jika Anda ingat bahwa dengan kekuatan besar datang tanggung jawab besar (seperti kata Spiderman), Anda harus baik-baik saja.
Pengantar sed yang cepat dapat ditemukan di http://evc-cit.info/cit052/sed_tutorial.html
Catatan tentang shell dan penggunaan string:
Untuk contoh khusus yang diberikan, berikut ini akan berfungsi juga:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... tetapi hanya karena:
- gema tidak peduli berapa banyak string dalam daftar argumennya, dan
- Tidak ada spasi dalam $ awalan dan $ akhiran
Biasanya merupakan praktik yang baik untuk mengutip string pada baris perintah karena meskipun berisi spasi, akan disajikan ke perintah sebagai argumen tunggal. Kami mengutip $ awalan dan $ akhiran untuk alasan yang sama: setiap perintah edit ke sed akan diteruskan sebagai satu string. Kami menggunakan tanda kutip ganda karena mereka memungkinkan interpolasi variabel; seandainya kita menggunakan tanda kutip tunggal perintah sed akan mendapatkan literal $prefix
dan $suffix
yang jelas bukan yang kita inginkan.
Perhatikan juga, saya menggunakan tanda kutip tunggal ketika mengatur variabel prefix
dan suffix
. Kami tentu saja tidak ingin interpretasi apa pun dalam string, jadi kami mengutipnya sehingga tidak ada interpolasi yang terjadi. Sekali lagi, ini mungkin tidak perlu dalam contoh ini tetapi itu kebiasaan yang sangat baik untuk masuk.