एक फ़ाइल से दो अन्य पात्रों द्वारा सीमांकित अंतराल में एक चरित्र को कैसे बदलें


0

मुझे वर्टिकल बार कैरेक्टर की सभी घटनाओं को |कॉमा के साथ बदलना पड़ता है ,जब वे किसी फाइल के प्रत्येक लाइन पर अक्षरों [और ]अक्षरों के बीच दिखाई देते हैं ।

मान लें कि मेरे पास फ़ाइल में नीचे स्ट्रिंग है:

wah wah| [go great|no great|so great] | wah wah | [go great|no great|so great]

मैं चाहता हूं कि मेरा आउटपुट नीचे जैसा हो:

wah wah| [go great,no great,so great] | wah wah | [go great,no great,so great]

ध्यान दें कि कई [... ]जोड़े हो सकते हैं । पहले ]और दूसरे के बीच की ऊर्ध्वाधर पट्टियों [को नहीं बदलना चाहिए।

शेल कमांड का उपयोग करके मैं इसे कैसे प्राप्त कर सकता हूं? मैंने नीचे कई तरह की कोशिश की, लेकिन कुछ भी काम नहीं किया।

sed '/[/,/]/s/|/,/g' abcd.csv

जवाबों:


2

करना

sed ': लूप; s / \ (\ [[^] [] * \) | \ ([^] [] * \] \) / \ 1 \ 2 /; t लूप ' input_file

क्या हो रहा है?

  • : loopलूपिंग के लिए एक लेबल है; मैं इसे एक क्षण में उपयोग करूँगा।
  • s/\(\[[^][]*\)|\([^][]*\]\)/\1,\2/एक के | बीच [और ]कॉमा के साथ प्रकट होने वाले को प्रतिस्थापित करता है । टूटा:

    s/  \(  \[  [^][]  *  \)  |  \(  [^][]  *  \]  \)  /  \1,\2  /
    • \(... \)एक खोज और समूह को प्रतिस्थापित करता है। यह देखते हुए एक [... ]एक साथ |उन दोनों के बीच, इस से मेल खाता है [ अप करने के लिए (सहित, लेकिन नहीं) (अंतिम) | के बाद एक समूह है, और सब कुछ के रूप में |ऊपर के माध्यम से (सहित) ]एक दूसरे समूह के रूप में।
    • \[एक शाब्दिक से मेल खाता है [
    • [^][]के अलावा [या किसी भी चरित्र से मेल खाता है ]। यह टूट जाता है
      [^] []
      यानी, का एक उदाहरण
      [^ character_to_not_match ]
    • *- के अलावा अन्य शून्य या अधिक वर्ण [या ]
    • \)- समूह का अंत; ऊपर चर्चा की गई।
    • |एक शाब्दिक है |(जिसे हम बदलना चाहते हैं)।
    • नियमित अभिव्यक्ति की दूसरी छमाही लगभग पहली छमाही के समान है: एक समूह से मेल खाती है जिसमें शून्य या अधिक वर्णों के अलावा [या ]इसके बाद एक ए शामिल है ]
    • फिर उस सभी को पहले समूह, एक अल्पविराम और दूसरे समूह से बदलें। चूंकि मिलान स्ट्रिंग में सब कुछ समूहों में से एक में है, को छोड़कर |, यह कार्यात्मक रूप से के \साथ बदलता है ,
  • t loop- परीक्षण / स्थानांतरण। यदि s कमांड ने एक मैच पाया और एक प्रतिस्थापन बनाया, तो लेबल पर वापस जाएं और फिर से प्रयास करें (क्योंकि s कमांड |एक बार में केवल एक को बदलता है )। यदि यह मेल नहीं खाता है, तो कमांड स्क्रिप्ट को समाप्त करें और अगली पंक्ति पर जाएं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.