Dalam skrip bash,
Saya memiliki string yang berisi beberapa kata yang dipisahkan oleh satu atau lebih dari satu spasi. yaitu:
Name Age Sex ID Address
Jika saya ingin menemukan salah satu kata, misalnya saya ingin menemukan indeks kata "Umur", bagaimana saya bisa melakukannya?
Apakah ada perintah yang akan mengembalikan nomor indeks kata yang saya inginkan secara langsung?
Terima kasih.
Jawaban:
Bash melakukan pemisahan kata dalam string dengan sendirinya - pada kenyataannya, lebih sering daripada tidak, menghindari itu adalah masalah, dan alasan mengutip sangat penting. Sangat mudah untuk meningkatkan itu dalam kasus Anda: cukup masukkan string Anda ke dalam array tanpa mengutipnya - bash akan menggunakan pemisahan kata untuk memisahkan elemen individual. Dengan asumsi string Anda disimpan dalam variabel
$str
,akan mengembalikan array 5 elemen. Indeks array Anda adalah indeks kata Anda (dihitung dari 0, seperti di sebagian besar bahasa scripting dan pemrograman), yaitu "Usia" diakses menggunakan
atau, jika Anda perlu menemukan indeks elemen berdasarkan konten, loop di atas array, yaitu
sumber
Ganti * Usia dengan Usia - ini akan menghapus apa pun sebelum "Usia":
Dapatkan apa pun sebelum "Usia"
Dapatkan panjang string itu (yang merupakan indeks "Usia"):
sumber
export L='debug info warn error'; export GTE='warn'; echo ${L/*${GTE}/${GTE}}
mencetak 'warn error'Jika Anda tidak harus menggunakan bash secara ketat, tetapi dapat menggunakan program lain yang biasa ditemukan pada sistem dengan bash maka Anda dapat menggunakan sesuatu seperti ini:
Python memulai pengindeksan string di nol, oleh karena itu saya menambahkan +1 ke akhir perintah.
sumber
Anda dapat menggunakan regex asli bash
Keluaran
sumber
Catatan : Dengan asumsi di sini bahwa menurut indeks Anda berarti Anda ingin tahu kata itu (mulai dari 0), bukan karakter mana dalam string kata dimulai. Jawaban lain membahas yang terakhir.
Bukannya aku sadar, tapi kamu bisa membuatnya. Dua trik:
Kode:
sumber
Coba oneliner javascript berikut dalam shell (gunakan shell javascript):
Atau dengan dokumen-sini:
sumber
Saya menemukan solusi yang berfungsi dengan baik.
Ia bekerja mirip dengan function indexOf () di Jawa yang mengembalikan kemunculan pertama dari string input.
Temukan solusi ini di sini http://www.linuxquestions.org/questions/linux-newbie-8/bash-string-manipulation-help-670627/ (posting terakhir). Orang ini menyelamatkan hariku. Penghargaan padanya.
Cara lebih cepat jika Anda ingin melakukan substring dari indexof pertama.
/programming/10349102/shell-script-substring-from-first-indexof-substring
sumber
Jika coreutils tersedia, Anda dapat melakukannya dengan cara berikut:
Per permintaan MariusMatutiae saya menambahkan penjelasan bagaimana operasi 3 langkah ini bekerja:
Untuk referensi harap periksa:
http://www.tldp.org/LDP/abs/html/parameter-substitution.html (buka: "Perluasan variabel / penggantian substring")
http://www.gnu.org/software/coreutils/manual/coreutils .html (pergi ke: "Perintah cut" dan "doa wc"
sumber
Gabungan dari dua jawaban yang diberikan sebelumnya, menggunakan array bash murni dan penggantian substring.
Idenya adalah untuk mendapatkan string dari semua kata sebelum yang Anda inginkan, lalu hitung jumlah kata dalam substring itu dengan membuatnya menjadi array.
Tentu saja Umur dapat disimpan dalam variabel lain
needle
, lalu gunakan${haystack%$needle*}
. Harapkan masalah jika kata yang Anda cari adalah bagian dari kata lain, di mana jawaban kopischke masih berfungsi.sumber