वर्णों से छुटकारा पाने के लिए sed का उपयोग करना <>


18

मेरे पास लाइनों के साथ एक फाइल है:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

मैं किरदारों को हटाने के लिए < ,और >हर लाइन से सेड का इस्तेमाल करना चाहूंगा

मैंने प्रयोग करने की कोशिश की sed 's/<>,//g'लेकिन यह काम नहीं किया (यह कुछ भी नहीं बदला)। क्या मुझे इन विशेष पात्रों से बचने की जरूरत है। क्या एकल sedकमांड का उपयोग करके कई वर्णों को हटाना संभव है ?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul

3
@srikanthradix: यह उन पात्रों को नहीं हटाता है, उन्हें रिक्त स्थान के साथ बदल देता है। आप चाहते हैं tr -d '<>,' ''(क्रिस डाउन के जवाब में)।
कीथ थॉम्पसन

1
@KeithThompson: tr -d '<>,'अंत में बिना ''?
उपयोगकर्ता अज्ञात

@userunknown: हाँ, सुधार के लिए धन्यवाद।
कीथ थॉम्पसन

जवाबों:


43

के साथ sed:

sed 's|[<>,]||g'

के साथ tr:

tr -d '<>,'

2
सही है, लेकिन मैं व्यक्तिगत |रूप से एक सीमांकक के रूप में उपयोग को थोड़ा भ्रमित करता हूं । sed 's/[<>]//g'पढ़ना थोड़ा आसान है।
कीथ थॉम्पसन

@KeithThompson मैं इसे व्यावहारिकता के लिए उपयोग करता हूं। मैं खुद को शाब्दिक |(और इस तरह से बच निकलने के लिए) से बहुत कम पाता हूं , मुझे शाब्दिक से निपटना पड़ता है /
क्रिस डाउन

2
एक उचित बिंदु। दूसरी ओर, |अक्सर एक मेटा-चरित्र भी होता है, जिसका उपयोग कुछ regexp सिंटैक्स में प्रत्यावर्तन के लिए किया जाता है (हालांकि sedइसके लिए विशेष आवश्यकता होती \|है)। व्यक्तिगत रूप से, अगर मुझे शाब्दिक /पात्रों से निपटने की आवश्यकता है, तो मैं आमतौर पर ,सीमांकक के रूप में उपयोग करता हूं ।
कीथ थॉम्पसन

1
उपरोक्त उल्लिखित व्यक्तिगत / विशिष्ट स्थितियों के अलावा, एक गैर-मानक सीमांकक का उपयोग करते समय एक आंतरिक वाक्यविन्यास अंतर होता है। पहले गैर- / सीमांकक को प्रत्येक सीड रेंज अभिव्यक्ति के लिए printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
बचाना

8

इसको आजमाओ: sed 's/[<>,]//g'


वहाँ ऊर्ध्वाधर सलाखों के लिए क्या कर रहे हैं?
पॉल टॉम्बलिन

sed 's / [<|> |] / / g' - s खोज करता है; / परिसीमनकर्ता है; [] कोष्ठक हमें एक से अधिक चीजों की खोज करने देते हैं; | वर्टिकल बार एक लॉजिकल है या जी ग्लोबली या पूरी फाइल को सर्च करने के लिए है।
इमान

3
आपको (या, वास्तव में, चाहिए) के |भीतर की आवश्यकता नहीं है []। उपयोग करें 's/[<>,]//g'
केविन

2
आपको वर्टिकल बार की जरूरत नहीं है। वर्ग कोष्ठक में कुछ भी एक सूची के रूप में खोजा जाता है। sed 's/[<>,]/ /g'वास्तव में अच्छी तरह से काम करेगा, अपने विचार को छोड़कर ऊर्ध्वाधर पट्टियों को भी हटा देगा।
पॉल टॉम्बलिन

जोड़ने के लिए: शायद आप नियमित अभिव्यक्तियों को देखना चाहते हैं, यह सबसे आसान उदाहरण है, लेकिन पहले से ही शक्ति का प्रदर्शन।
बर्नहार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.