मैं एक सेड कमांड में चर का उपयोग कैसे करूं?

मैंने निम्नलिखित कोड को बदलने की कोशिश की QQ साथ में ZZ, लेकिन यह वह नहीं करता जो मैं चाहता हूं:

var1=QQsed -i 's/$var1/ZZ/g' $file

हालाँकि, यह कोड वही करता है जो मैं चाहता हूँ:

sed -i 's/QQ/ZZ/g' $file

मैं चर का उपयोग कैसे करूं sed?

शेल चर के विस्तार के लिए जिम्मेदार है । जब आप स्ट्रिंग्स के लिए एकल उद्धरण का उपयोग करते हैं, तो इसकी सामग्री का शाब्दिक व्यवहार किया जाएगा, इसलिए sed अब शाब्दिक की हर घटना को बदलने की कोशिश करता है $var1 द्वारा ZZ.

दोहरे उद्धरण चिह्नों का उपयोग करना

व्हाइटस्पेस को संरक्षित करते समय शेल को चर का विस्तार करने के लिए दोहरे उद्धरण चिह्नों का उपयोग करें:

sed -i "s/$var1/ZZ/g" "$file"

जब आपको प्रतिस्थापन स्ट्रिंग में उद्धरण वर्ण की आवश्यकता होती है, तो आपको इसे बैकस्लैश से पहले करना होगा जिसे शेल द्वारा व्याख्या किया जाएगा । निम्नलिखित उदाहरण में, स्ट्रिंग quote me द्वारा प्रतिस्थापित किया जाएगा "quote me" (चरित्र & द्वारा व्याख्या की जाती है sed):

sed -i "s/quote me/\"&\"/" "$file"

एकल उद्धरण का उपयोग करना

यदि आपके पास बहुत सारे खोल मेटा-वर्ण हैं, तो पैटर्न के लिए एकल उद्धरण और चर के लिए दोहरे उद्धरण चिह्नों का उपयोग करने पर विचार करें:

sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"

ध्यान दें कि मैं कैसे उपयोग करता हूं s,pattern,replacement, के बजाय s/pattern/replacement/, मैंने हस्तक्षेप से बचने के लिए ऐसा किया / में \0/.

उदाहरण

शेल तब उपरोक्त कमांड चलाता है sed अगले तर्कों के साथ (मानते हुए pattern=bert और file=text.txt):

-is,bert,Say hurrah to &: \0/,text.txt

अगर file.txt शामिल हैं bert, आउटपुट होगा:

Say hurrah to bert: \0/

हम में चर का उपयोग कर सकते हैं sed दोहरे उद्धरण चिह्नों का उपयोग करना:

sed -i "s/$var/r_str/g" file_name

यदि आपके पास स्लैश है / चर में फिर नीचे की तरह अलग विभाजक का उपयोग करें:

sed -i "s|$var|r_str|g" file_name

विस्तार करने के लिए (यमक इरादा) पर मणि का जवाब,

  • यह समाधान अन्य आदेशों को खिलाए गए नियमित अभिव्यक्तियों के लिए काम करेगा, जैसे perl
  • अपेक्षित रूप से चर का विस्तार करने के लिए रेगेक्स (हाँ, यहां तक कि यूनिक्स सिस्टम के तहत) के आसपास दोहरे उद्धरण चिह्नों का उपयोग करें
  • | आपके चर के मान में भी दिखाई दे सकता है, इसलिए अन्य सीमांकक आज़माने से न डरें

देखें आपका इस पोस्ट में मेरा जवाब

संबंधित: Escape a string for a sed replace pattern - Stack Overflow