2013-08-16 5 views
7

मैं एक फ़ाइल से सिंगल कोट्स और डबल कोट्स को हटाने की कोशिश कर रहा हूं। क्या मैं इसे एक ही sed कमांड में कर सकता हूं?sed एक ही समय में सिंगल और डबल कोट्स को हटाने के लिए

मैं कोशिश कर रहा हूँ:

sed 's/\"//g;s/\'//g' txt file 

लेकिन इस त्रुटि

`मिल '' बेमिसाल है।

कृपया मदद करें।

उत्तर

5

बजाय इस एक का प्रयास करें:

sed -e 's|["'\'']||g' txt 
+0

@ user2689092 नोट इमेन का समाधान मध्यस्थ चरित्र के साथ sed अभिव्यक्ति संलग्नक को बदलने के साथ एक तकनीक का उपयोग करता है। आप बीबीबी के साथ प्रतिस्थापित करने के लिए, उदाहरण के लिए, sed -e का% aaa% bbb% g 'का उपयोग कर सकते हैं, मानते हैं कि मूल इनपुट में कोई "%" नहीं है। –

0

ठीक है, यहाँ है कि मैं क्या के लिए आया था गया है।

सबसे पहले, मुझे ord() के साथ पता चला कि सिंगल और डबल कोट्स कैरेक्टर के लिए कोड क्या हैं, और उसके बाद $ (..) वाक्यविन्यास का इस्तेमाल बिना अज्ञात sed अभिव्यक्ति में किया जाता है। मैंने खाली तारों के बजाय एक्सएक्स और वाई का इस्तेमाल किया। जाहिर है यह इष्टतम से दूर है, यानी उन्हें शायद एक अभिव्यक्ति में जोड़ा जाना चाहिए, मैं आपको इसके साथ प्रयोग करने के लिए प्रोत्साहित करता हूं। समस्याओं को उद्धृत करने से बचने के लिए कई तकनीकें हैं, आप शैल द्वारा व्याख्या किए जाने से बचने के लिए, अलग अभिव्यक्ति में अलग अभिव्यक्ति भी डाल सकते हैं। आउटपुट में एकल अपठनीय अक्षरों से निपटने का प्रयास करते समय ord()/chr() चाल भी उपयोगी होती है, उदा। गैर-यूटीएफ कंसोल पर यूटीएफ तार।

dtpwmbp:~ pwadas$ echo '"' | perl -pe 'print ord($_) . "\n";' 
34 
" 
dtpwmbp:~ pwadas$ echo "'" | perl -pe 'print ord($_) . "\n";' 
39 
' 
dtpwmbp:~ pwadas$ echo \'\" 
'" 
dtpwmbp:~ pwadas$ echo \'\" | sed -e s/$(perl -e 'print chr(34) . "\n"')/XX/g | sed -e s/$(perl -e 'print chr(39) . "\n"')/yy/g 
yyXX 
dtpwmbp:~ pwadas$ 

संपादित करें (ध्यान दें कि इस समय, दोनों पात्रों को एक ही स्ट्रिंग "yy" के साथ बदल जाता है)। वहाँ यह करने के लिए संभव हो जाना चाहिए चरित्र कोड और विपरीत, यानी करने के लिए "अनुवाद" वर्ण के लिए कुछ खोल उपयोगिताओं हो सकता है पेर्ल या अन्य भाषा दुभाषिया का उपयोग किए बिना ऐसा करें।

dtpwmbp:~ pwadas$ echo \'\" | sed -e s/[`perl -e 'print chr(34) . chr(39)'`]/yy/g 
yyyy 
dtpwmbp:~ pwadas$ 

और यहाँ अभी तक खोल में एक और तरीका है, शायद और भी आसान

dtpwmbp:~ pwadas$ X="'"; Y='"' ; echo $X$Y; echo $X$Y | sed -e "s/$X/aa/g;s/$Y/bb/g" 
'" 
aabb 
dtpwmbp:~ pwadas$ 
3

आप खोल में झुलसाना उद्धरण की एक जोड़ी के अंदर एक भी बोली नहीं बच सकते। यद्यपि डबल कोट्स से बचने की अनुमति है। बाद एसईडी आदेश काम करना चाहिए:

sed "s/['\"]//g" file 
+1

यह सही जवाब है, कभी-कभी आपको सिंगल-उद्धृत टेक्स्ट होना होता है, फिर इसमें एकल कोट डालने का तरीका '' '' है उदा। '' यह '' aliive! ''। – jthill

12

एक और संभावना tr उपयोग करने के लिए होगा:

tr -d \'\" file 
2

आप नीचे दिए गए

sed "s/'/ /g" file.txt > newfile.txt 
sed 's/\"//g' newfile.txt > Required_file.txt 

Required_file.txt आदेशों का उपयोग कर सकते हैं अंतिम आउटपुट है।

संबंधित मुद्दे