मैं बदलने के लिए निम्नलिखित कोड की कोशिश की QQके साथ ZZ, लेकिन यह जो मैं चाहता भी नहीं करता है:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
हालाँकि, यह कोड वही करता है जो मैं चाहता हूँ:
sed -i 's/QQ/ZZ/g' $file
मैं चर का उपयोग कैसे करूं sed?
मैं बदलने के लिए निम्नलिखित कोड की कोशिश की QQके साथ ZZ, लेकिन यह जो मैं चाहता भी नहीं करता है:
var1=QQ
sed -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) के साथ उपरोक्त कमांड चलाता है :
-i
s,bert,Say hurrah to &: \0/,
text.txt
यदि file.txtशामिल है bert, तो आउटपुट होगा:
Say hurrah to bert: \0/
gविकल्प है, इसलिए आप s,foo,bar,gइसके बजाय पास होंगे ।
\\0बजाय उपयोग करने के लिए लुभाए जाते हैं \0, तो यह तब नहीं किया जाना चाहिए जब \0एकल उद्धरणों में संलग्न हो। अन्यथा पूरे मैच के बजाय sedएक शाब्दिक के लिए पैटर्न का विकल्प देगा \0।
हम sedदोहरे उद्धरण चिह्नों का उपयोग कर चर का उपयोग कर सकते हैं :
sed -i "s/$var/r_str/g" file_name
यदि आपके पास /चर में स्लैश है, तो नीचे की तरह अलग विभाजक का उपयोग करें:
sed -i "s|$var|r_str|g" file_name
/चर में स्लैश है => इससे मुझे बचा लिया गया है! मेरा चर एक url है और इसमें सम्मिलित है /। |विभाजक के रूप में उपयोग करने के लिए मेरे मुद्दे को तय किया