जवाबों:
उदाहरण के परिणाम में दिखाए गए अनुसार आप बैकस्लैश को किसी स्थान से बदल सकते हैं:
sed 's/\\/ /g'
या आप इसे अपने कोड में दिखाए अनुसार हटा सकते हैं:
sed 's/\\//g'
इसके विशेष अर्थ को रद्द करने के लिए बैकस्लैश से बचने के साथ संभावित समस्याएं हैं। बैकस्लैश एक विशेष चरित्र है जिसका उपयोग शेल में और नियमित अभिव्यक्ति दोनों में भागने के लिए किया जाता है।
शेल की कमांड लाइन या स्क्रिप्ट पर आप जो कमांड टाइप करते हैं, वह पहले शेल द्वारा प्रोसेस की जाती है, जो अक्षरों के विशेष अर्थ और उनके भागने की व्याख्या करता है। उसके बाद परिणाम को निष्पादित (जैसे sed
) कमांड के लिए पारित किया जाता है जो पात्रों की अपनी व्याख्या करता है। जब आप एक कमांड का निर्माण कर रहे होते हैं, तो मानसिक प्रक्रिया विपरीत होती है: पहले रेगेक्स के लिए एस्केपिंग को जोड़ें, फिर शेल के लिए एसेडिंग को जोड़ें।
एक regex में (जैसे आदेशों के लिए इनपुट sed
, grep
आदि) बैकस्लैश इस तरह बैकस्लैश होना कर सकते हैं: \\
और भी आप सेट अभिव्यक्ति का उपयोग कर सकते [\]
है जैसे आप क्योंकि वहाँ बैकस्लैश अपनी विशेष अर्थ खो देता है इस्तेमाल किया।
एक शेल (जैसे bash
) में आप बैकस्लैश द्वारा बैकस्लैश से बच सकते हैं। इसलिए \
लिखने के बजाय \\
। दोहरे उद्धरण चिह्नों के बीच स्ट्रिंग संलग्न करने "
से बैकस्लैश व्यवहार अधिक जटिल हो जाता है <1> लेकिन डबल बैकस्लैश अभी भी एक सिंगल बैकलैश उत्पन्न करेगा। एकल उद्धरणों के बीच स्ट्रिंग '
को शामिल करने से हर पात्र का शाब्दिक रूप से इलाज किया जा सकता है '
।
आप उपयोग करना चाहते हैं डबल कोट्स :, आप निम्न में से एक का उपयोग कर सकते
sed "s/\\\\//g"
एस्केप - \
द्वारा \
खोल में, और हर बचने \
फिर regex में। वास्तव में इस मामले में दोहरे उद्धरण आवश्यक नहीं हैं क्योंकि प्रत्येक विशेष वर्ण ठीक से बच गया है।
sed "s/[\\]//g"
- एक बैकलैश द्वारा शेल में भाग लें \
और रेगेक्स में एक सेट का उपयोग करें [
]
।
sed "s/[\]//g"
- हाँ, आपका उदाहरण POSIX आज्ञाकारी वातावरण में काम करना चाहिए! दोहरे उद्धरण चिह्नों के बीच में \
जब तक कि यह दोहरे उद्धरणों के संदर्भ में एक विशेष चरित्र को प्रस्तुत नहीं करता है: $`"\
या एक नई पंक्ति। ऐसा लगता है कि आपके मामले में शेल या तो sed
POSIX मानक का पालन नहीं करता है।
सिंगल कोट्स के साथ आप स्ट्रिंग का उपयोग भी कर सकते हैं जैसा आपने इस्तेमाल किया था या इससे भी छोटा तरीका:
sed 's/[\]//g'
sed 's/\\//g'
जागने में, मैं ऐसा करूँगा;
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
\
पहले की \
तरह रखें जैसे आप सबसे विशेष पात्रों के साथ करते हैं।
g
अज्ञात कारण के लिए ध्वज को छोड़ दिया है । यह कमांड के व्यवहार को बदल देता है लेकिन इस तरह के बदलाव को प्रश्न में नहीं पूछा गया था। अन्यथा आपका उत्तर पहले के उत्तरों की तुलना में कुछ नया नहीं लाता है।
sed
(या संभवत: आप उस आदेश को गैर- POSIX शेल से चला रहे हैं) का गैर-POSIX कार्यान्वयन हो सकता है)।sed
हालांकि आपको ज़रूरत नहीं है ,tr
पर्याप्त हैtr -d '\\' < P
:।