सीडिंग में डॉट्स (;) की जगह


9

इतना वास्तविक प्रश्न है - क्या किसी को इस बात का अंदाजा है कि M-BM-अन्य पात्रों को खोए बिना विशेष चरित्र को कैसे हटाया जाए ?

मेरे पास पाठ का एक तार है:

" . . ."

अर्थात्

space dot space dot space dot

मैं इस स्ट्रिंग की सभी आवृत्तियों को पाठ फ़ाइल में प्रतिस्थापित करने का प्रयास कर रहा हूं

"..."

अर्थात्

dot dot dot

मैं sed के साथ करने की कोशिश कर रहा था:

sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots

दुर्भाग्य से, यह इनपुट फ़ाइल को थोड़ा भी नहीं बदलता है। फ़ाइल: https://www.dropbox.com/s/46zmiruy3ln85a1/sed-dots

जब मैं टेक्स्ट एडिटर में एक ही स्ट्रिंग को बदलने की कोशिश करता हूं (मैं गीन का उपयोग करता हूं) तो यह ठीक से पाया और बदल दिया जाता है।

केवल कारण मैं सोच सकता हूं कि उन स्थानों में से कुछ (या सभी) वास्तव में रिक्त स्थान नहीं हैं, लेकिन कुछ विशेष चरित्र हैं।

क्या किसी को यह पता है कि उस स्ट्रिंग को सीड (या किसी अन्य कमांड लाइन टूल) के साथ कैसे ढूंढना और बदलना है? कृपया मेरे विचार पर अपने विचार का परीक्षण करें, क्योंकि समस्या इतनी स्पष्ट नहीं है जितनी कि यह प्रतीत हो सकती है - यही कारण है कि मैंने इसके बारे में पूछा।

cat -Aमायफाइल का उपयोग करने के बाद यह समस्या लगती है कि वे स्थान रिक्त स्थान नहीं हैं, बल्कि M-BM-विशेष चरित्र हैं। .खोज के लिए सुझाए गए किसी भी प्रतीक का उपयोग करना एक अच्छा विचार नहीं है क्योंकि जोखिम है कुछ अन्य वर्ण हटा दिए जाएंगे।

जवाबों:


10

पहले मैं एक वास्तविक फ़ाइल का उपयोग करने की तुलना echoमें परीक्षण और पाइपिंग करके शुरू करूंगा sed। दूसरे, आप {n}मल्टीपल और सीमा को निरूपित करने के लिए विस्तारित रेगेक्स मॉडल में उपयोग कर सकते हैं ।

आप वहां बहुत ज्यादा थे लेकिन आपके रेगेक्स से एक प्रमुख स्थान की उम्मीद थी।

$ echo 'cheese . . . muffins' | sed -r 's/(\s?\.){3}/ dot dot dot/g'
cheese dot dot dot muffins

ध्यान दें कि \s?उत्पादन को बर्बाद करने के लिए अभी भी पर्याप्त लालची है, इसलिए मैंने आउटपुट में एक स्थान जोड़ा है। आप शायद ऐसा न चाहें। मैंने भी स्थान को वैकल्पिक बना दिया है, इसलिए यह निम्नलिखित सभी से मेल खाएगा:

...
. ..
.. .
. . .
 . . . 

बस वैकल्पिक ?ध्वज को हटा दें ।


यूनिकोड (टिप्पणियों में) के साथ आपकी समस्या को देखते हुए आप डेटा को इसके ASCII तुल्यता के साथ मजबूर कर सकते हैं iconvऔर फिर इसे सीड कर सकते हैं:

$ iconv -f utf-8 -t ascii//translit sed-dots | sed -r 's/(\s?\.){3}/ dot dot dot/g'
Lorem ipsum dot dot dot
Some dot dot dot more text

मुझे आश्चर्य है कि आप echoएक फ़ाइल को बिल्ली के बजाय उपयोग करने की सलाह देते हैं , कम से कम जब आप एक फ़ाइल को बिल्ली करते हैं, तो आप जानते हैं कि शेल कुछ भी व्याख्या नहीं कर रहा है, और न ही प्रतिध्वनि है।
फ्लिम

@ डॉट्स के साथ एक साधारण उदाहरण के लिए, यह वास्तव में एक मुद्दा नहीं है। यदि आप किसी फ़ाइल से लोड करने जा रहे हैं, तो परेशान न हों cat- बस sedफ़ाइल को लोड करें (ओपी के उदाहरण के अनुसार) लेकिन इनलाइन को न सहेजें (निकालें -i, ताकि आप आउटपुट के विरुद्ध देख सकें और परीक्षण कर सकें)।
ओली

@ यह आपके उदाहरण के साथ काम करता है, लेकिन यह मेरी फ़ाइल के साथ काम नहीं करता है (मेरे प्रश्न में, एक लिंक है)। यह समस्या है - आपकी कमांड और अन्य लोगों को काम करना चाहिए, लेकिन वे नहीं करते हैं क्योंकि उन डॉट्स के साथ कुछ समस्या है। कृपया मेरी फाइल पर अपनी कमांड का परीक्षण करें और आप देखेंगे कि यह काम नहीं करता है।
रफाल

1
@ रफाल यदि आप देखें तो आप देख cat -A sed-dotsसकते हैं कि डॉट्स के बीच "रिक्त स्थान" विशेष M-BM- वर्ण हैं ... निश्चित नहीं कि वे वहां कैसे क्रेप करते हैं, लेकिन उन्हें बदलने की आवश्यकता होती है। आप उन्हें अच्छी तरह से लक्षित नहीं कर सकते हैं, तो यह काम करता है: sed -r 's/(\s\..\..\.)/ dot dot dot/ig' sed-dots
ओली

@ ओली यह काम करता है। आपका बहुत बहुत धन्यवाद! क्या आप वाक्यविन्यास समझा सकते हैं? क्या आप सुनिश्चित हैं कि इसका कोई साइड-इफेक्ट नहीं है और यह किसी और चीज की जगह नहीं लेगा? जहाँ तक मैं देख रहा हूँ, यह RegExp डॉट्स के बाद किसी भी वर्ण से मेल खाएगा। हालांकि, एम-बीएम एक चरित्र नहीं है, यह तीन है। तो यह संभवतः कैसे काम कर सकता है?
रफाल

0

सभी को बदलने के लिए निम्नलिखित प्रयास करें "।" से "।"

sed -r 's/\. /\./g' -i sed-dots

लेकिन के लिए "। । ।" सेवा "..."

sed -r 's/\. \. \./\.\.\./g' -i sed-dots

0

जब मैंने इसे चलाया तो मैं आपकी फ़ाइल का उपयोग कर सकता था:

tr '\240' ' ' < sed-dots.txt > sed-dots.new

यह रूपांतरण चरण के बिना काम किया:

sed 's/[[:blank:]]\.[[:blank:]]\.[[:blank:]]\./.../g' sed-dots.txt

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