Saya sudah membaca beberapa pertanyaan manipulasi piping bash string tetapi mereka tampaknya aplikasi khusus.
Pada dasarnya, apakah ada cara untuk melakukan hal di bawah ini dengan lebih sederhana?
dari pada
$ string='hello world'; string2="${string// /_}"; echo "${string2^^}"
HELLO_WORLD
sesuatu seperti
$ echo 'hello world' | $"{-// /_}" | "${ -^^}"
HELLO_WORLD
Sunting Saya tertarik untuk tetap berada dalam manipulasi bash jika memungkinkan untuk mempertahankan kecepatan (bukan sed / awk yang memiliki kecenderungan untuk sangat memperlambat skrip saya)
Sunting2: @jimmij
Saya suka contoh kedua dan menuntun saya untuk membuat suatu fungsi.
bash_m() { { read x; echo "${x// /_}"; } | { read x; echo "${x^^}"; }; }
echo hello world | bash_m
HELLO_WORLD
tr
manual, maka kebalikannya benar karena waktu pemijahan proses dapat diabaikan dibandingkan dengan waktu manipulasi string yang sed
dan awk
berdedikasi. Jika string sangat panjang, katakan manual bash keseluruhan, maka bash bisa menolak untuk melanjutkan sama sekali, karena beberapa batasan internal.
sed
, awk
, tr
atau serupa. Lihatlah jawaban gena2x, yang saya edit beberapa waktu lalu dengan menambahkan informasi ini: unix.stackexchange.com/questions/162221/... Anda mungkin ingin membandingkannya dengan jawaban terdon untuk pertanyaan yang sama di mana ia memberikan waktu untuk string pendek di mana proses kasus pemijahan membutuhkan waktu paling lama. Anda dapat mengujinya sendiri dan memposting hasilnya.
read x; echo $x
ini lebih baik untuk kinerja? Sintaksnya tidak terlihat lebih pendek atau lebih bersih. x=${x// /_}; x=${x^^}
adalah cara yang jauh lebih ringkas untuk melakukan hal yang sama seperti {read x; echo ${x...
. Sejauh kinerja berjalan, @jimmij telah menunjukkan bahwa tr
/ sed
akan lebih cepat daripada bash
, perhitungan garpu sama. Menggunakan pipa selalu menghasilkan proses ekstra sehingga argumen menyimpan garpu tidak lagi berlaku. Jadi, jika menggunakan pipa, gunakan sed
/ tr
dll. Jika Anda dapat melakukannya di bash, lakukan dan lewati read x; echo $x
omong kosong ini .