मैंने निम्नलिखित कोड को बदलने की कोशिश की QQ
साथ में ZZ
, लेकिन यह वह नहीं करता जो मैं चाहता हूं:
var1=QQsed -i 's/$var1/ZZ/g' $file
हालाँकि, यह कोड वही करता है जो मैं चाहता हूँ:
sed -i 's/QQ/ZZ/g' $file
मैं चर का उपयोग कैसे करूं sed
?
मैंने निम्नलिखित कोड को बदलने की कोशिश की 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
|
आपके चर के मान में भी दिखाई दे सकता है, इसलिए अन्य सीमांकक आज़माने से न डरें