Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

शेल विस्तार के अंदर xargs चर पर sed का उपयोग काम नहीं कर रहा है

केवल sed के साथ समाधान

sed, स्वयं, असंशोधित और संशोधित लाइन दोनों का उत्पादन करने में सक्षम है:

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

उपरोक्त में, sed पहले RENAME स्ट्रिंग को लाइन की शुरुआत में जोड़ता है। फिर, p कमांड sed को उस समय लाइन को प्रिंट करने के लिए कहता है (इसमें "स्टेजिंग" अभी भी है)। अगला प्रतिस्थापन "विकास" में डालता है और फिर वह संस्करण भी मुद्रित होता है।

अपडेट करें: मान लीजिए हम एक लाइन पर आउटपुट चाहते हैं:

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

पहला s ऊपर दिया गया कमांड RENAME को शुरुआत में जोड़ता है और फिर लाइन को दोगुना करता है। दूसरा विकास के साथ मंचन की दूसरी घटना को बदल देता है।

xargs संस्करण ने प्रतिस्थापन क्यों नहीं किया?

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

xargs निष्पादित होने से पहले, बैश स्ट्रिंग्स को संसाधित करता है। विशेष रूप से, यह देखता है $(echo {} | sed 's/staging/development/g') और यह इसे निष्पादित करता है ("कमांड प्रतिस्थापन") और परिणाम प्राप्त करता है {} . इसलिए, जब xargs अंत में चलाया जाता है, तो यह कमांड देखता है:

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

नतीजतन, s/staging/development/g प्रतिस्थापन कभी नहीं किया जाता है।

xargs और शेल को एक साथ उचित क्रम में काम करना

इसके लिए एक समाधान है:

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

उपरोक्त बैश कमांड को सिंगल-कोट्स के भीतर रखता है और उन्हें तर्क के रूप में पास करता है sh . इस तरह, स्ट्रिंग को शेल द्वारा तब तक संसाधित नहीं किया जाता है जब तक कि xargs ने प्रतिस्थापन नहीं किया हो।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. आप टोरनेडो से रेडिस को * ठीक से * क्वेरी कैसे करते हैं?

  2. रेडिस में स्टोर करने के लिए जावा में मानचित्र को क्रमबद्ध कैसे करें?

  3. रेडिस डेटास्टोर के लिए ट्रिगर कैसे कार्यान्वित करें?

  4. रेडिस एंटरप्राइज क्लस्टरिंग कमांड त्रुटि 'क्लस्टर'

  5. रेडिस टेम्प्लेट का उपयोग करके स्कैन करने में सक्षम नहीं