मैं बदलने के लिए निम्नलिखित कोड की कोशिश की 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 है और इसमें सम्मिलित है /
। |
विभाजक के रूप में उपयोग करने के लिए मेरे मुद्दे को तय किया