जवाबों:
बस उस वाक्य रचना का उपयोग करें:
sed 's/馑//g' file1
या बच गए रूप में:
sed "s/$(echo -ne '\u9991')//g" file1
(ध्यान दें कि बैश के पुराने संस्करण और कुछ गोले समझ में नहीं आते हैं echo -e '\u9991'
, इसलिए पहले जांच लें।)
sed
जी मॉडिफायर है, इसलिए यह सभी घटनाओं को तब भी प्रतिस्थापित करता है जब वे एक दूसरे का अनुसरण करते हैं। इसके अलावा sed को इसे एक चरित्र के रूप में गिनना चाहिए, देखें: echo -ne "馑" | wc -m
देता है 1
। यदि आप बाइट्स ( wc -c
) की गणना करते हैं तो यह वापस आ जाएगी 3
। क्या मैं आपके प्रश्न को सही ढंग से समझ पाया हूं?
.
"एक चरित्र" या "एक बाइट" का मतलब है?
echo 馑 | sed s/...//
मुझे देता है 馑
(कुछ भी नहीं बदला गया है)
en_US.UTF-8
, लेकिन इसके अंतर्गत नहीं है C
।
पर्ल यह कर सकता है:
echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
मानक इनपुट, आउटपुट और त्रुटि के लिए UTF-8 चालू करता है।
sed
समर्थन यूनिकोड के कई संस्करण :
मुझे बीएसडी sed पर जानकारी नहीं मिली, जो मुझे लगा कि अजीब है, लेकिन मुझे लगता है कि ऑड्स अच्छे हैं कि यह यूनिकोड का भी समर्थन करता है। दुर्भाग्य से, यह बताने के लिए कोई मानक तरीका नहीं है कि sed
किस एन्कोडिंग का उपयोग किया जाए, इसलिए प्रत्येक व्यक्ति अपने तरीके से ऐसा करता है।
यह मेरे लिए काम करता है:
$ vim -nEs +'%s/\%u9991//g' +wq file1
यह एक बूंद अधिक क्रिया है जो मैं चाहूंगा; यहाँ एक पूर्ण विवरण है:
-n
निष्क्रिय स्वैप फ़ाइल को निष्क्रिय करें-E
पूर्व सुधार मोड-s
शांत अवस्था+'%s/\%u9991//g'
प्रतिस्थापन कमांड निष्पादित करें+wq
सुरषित और बहारfile1
जगह में संशोधन करता है , क्या यह सही है?
BASH के हाल के संस्करणों के साथ, बस sed अभिव्यक्ति के आसपास के उद्धरणों को छोड़ दें और आप BASH के बच गए तारों का उपयोग कर सकते हैं। बीएएस द्वारा वाइल्डकार्ड के रूप में व्याख्या की जाने वाली sed अभिव्यक्ति या sed अभिव्यक्ति के कुछ हिस्सों के भीतर रिक्त स्थान व्यक्तिगत रूप से उद्धृत किया जा सकता है।
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
echo 馑 | sed s/...//
कुछ भी प्रिंट करता है?