Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Menggunakan sed pada variabel xargs tidak berfungsi di dalam ekspansi Shell

Solusi dengan sed saja

sed, sendiri, mampu menghasilkan baris yang tidak dimodifikasi dan yang dimodifikasi:

$ echo "redis::staging::key" | sed 's/^/RENAME /; p; s/staging/development/g'
RENAME redis::staging::key
RENAME redis::development::key

Di atas, sed pertama menambahkan string RENAME ke awal baris. Kemudian, p perintah memberitahu sed untuk mencetak baris seperti yang ada pada saat itu (dengan "pementasan" masih di dalamnya). Substitusi berikutnya dimasukkan ke dalam "pengembangan" dan kemudian versi itu juga dicetak.

Pembaruan: Misalkan kita ingin output pada satu baris:

$ echo "redis::staging::key" | sed 's/.*/RENAME & &/; s/staging/development/2'
RENAME redis::staging::key redis::development::key

s pertama perintah di atas menambahkan RENAME ke awal dan kemudian menggandakan baris. Yang kedua menggantikan kemunculan kedua dari pementasan dengan pengembangan.

Mengapa versi xargs tidak melakukan penggantian?

xargs -I {} echo "RENAME {} $(echo {} | sed 's/staging/development/g')"

Sebelum xargs dieksekusi, bash memproses string. Secara khusus, ia melihat $(echo {} | sed 's/staging/development/g') dan menjalankannya ("substitusi perintah") dan mendapatkan hasil {} . Jadi, ketika xargs akhirnya dijalankan, ia melihat perintah:

xargs -I {} echo "RENAME {} {}"

Akibatnya, s/staging/development/g penggantian tidak pernah dilakukan.

Membuat xargs dan shell bekerja sama dalam urutan yang benar

Ada perbaikan untuk ini:

$ echo "redis::staging::key" | xargs -I {} sh -c 'echo RENAME {} $(echo {} | sed 's/staging/development/g')'
RENAME redis::staging::key redis::development::key

Di atas menempatkan perintah bash dalam tanda kutip tunggal dan meneruskannya sebagai argumen ke sh . Dengan cara ini, string tidak diproses oleh shell sampai xargs melakukan substitusi.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengaktifkan cache terdistribusi/cluster saat menggunakan redis dengan cache data pegas

  2. Cara membatalkan bagian hierarki (pohon) data dalam cache Redis

  3. Bagaimana cara men-deploy node.js dengan redis di kubernetes?

  4. Konfigurasi replikasi redis

  5. Apa perbedaan antara metode HSET dan HMSET dalam database redis?