Saya memiliki string dalam format selanjutnya
id;some text here with possible ; inside
dan ingin membaginya menjadi 2 string dengan kemunculan pertama ;
. Jadi, seharusnya: id
dansome text here with possible ; inside
Saya tahu cara memisahkan string (misalnya, dengan cut -d ';' -f1
), tetapi akan terpecah menjadi lebih banyak bagian karena saya memiliki ;
di dalam bagian kiri.
bash
shell-script
string
split
gakhov
sumber
sumber
id
danstring
Jawaban:
cut
terdengar seperti alat yang cocok untuk ini:Tetapi
read
bahkan lebih cocok:sumber
read
karena saya menggunakanbash
. @Manatwork terima kasih!cut
Pendekatan hanya akan bekerja ketika "$ s" tidak mengandung karakter baris baru. baca dalam shell seperti Bourne. <<< dalam rc, zsh dan versi terbaru dari bash dan ksh93 dan merupakan salah satu yang tidak standar.-a
untuk beberapa alasan ketika menyebutkanbash
'sread
. (Jelas tidak ada gunanya di sini.)-f 2-
dalamstring="$( cut -d ';' -f 2- <<< "$s" )"; echo "$string"
perintah. Inilah yang mengabaikan sisa pembatas dalam string untuk hasil cetak. Tidak jelas ketika melihat halaman manualcut
Dengan sh standar apa saja (termasuk bash):
read
solusi berbasis akan bekerja untuk nilai karakter tunggal (dan dengan beberapa shell, byte tunggal)$sep
selain spasi, tab atau baris baru dan hanya jika$s
tidak mengandung karakter baris baru.cut
solusi berbasis hanya akan berfungsi jika$s
tidak mengandung karakter baris baru.sed
solusi dapat dirancang yang menangani semua kasus sudut dengan nilai apa pun$sep
, tetapi tidak layak untuk sejauh itu ketika ada dukungan built-in di shell untuk itu.sumber
Seperti yang telah Anda sebutkan bahwa Anda ingin menetapkan nilai ke id dan string
pertama-tama tetapkan pola Anda ke variabel (mis. str)
Sekarang Anda memiliki nilai dalam variabel masing-masing
sumber
some_command
, maka pola Anda akan disimpan dalam $ 1 dan menggunakan kode di atas dengan 1 alih-alih strSelain solusi lain, Anda dapat mencoba sesuatu
regex
berdasarkan:atau tergantung pada apa yang Anda coba lakukan dengan tepat, Anda bisa menggunakannya
di mana
\1
dan\2
berisi dua substring yang Anda inginkan.sumber
Solusi dalam bash standar:
sumber