2010-07-26 10 views
5

पर दो या दो से अधिक रिक्त स्थान बदलें I db2 क्वेरी के स्वरूपण के साथ संघर्ष कर रहा हूं। मैं एक अर्धविराम के साथ एक स्ट्रिंग में 2 या अधिक रिक्त स्थान को प्रतिस्थापित करना चाहता हूं। मैं कैसे सभी रिक्त स्थान के साथ यह करने के लिए पता है, सवाल होगा केवल 2 या अधिक रिक्त स्थान को बदलने का तरीका: पीएक या अर्धविराम

यहाँ है एक उदाहरण है, मैं इस परिवर्तन करना चाहते हैं:

john doe 1900-01-01 california 

को
john doe;1900-01-01;california 

समस्या यह है कि मेरे पास नाम फ़ील्ड में एक स्थान है, इसलिए मैं एक साधारण tr कमांड का उपयोग नहीं कर सकता। मेरे असली काम में, किसी भी क्षेत्र में एक ही स्थान हो सकता है।

मैं आपकी मदद की बहुत सराहना करता हूं! अग्रिम में धन्यवाद!

+0

क्या नाम के बाद हमेशा दिनांक/अंक होगा? – Anders

+0

एक प्रारूपण मुद्दा था, उसने अपने पहले उदाहरण में 2 से अधिक रिक्त स्थान दिए थे, लेकिन टेक्स्ट केवल एक के साथ दिखाई देता था, जिससे भ्रम पैदा हुआ। मैंने ठीक कर दिया। –

+0

@Andreas: नहीं, यह केवल एक उदाहरण है। 7 कॉलम हैं, और तिथि अंतिम कॉलम से पहले है। और मैं कुछ ऐसा करना चाहता था जो प्रत्येक क्वेरी के लिए काम करता हो। कोई फर्क नहीं पड़ता कि किस तरह के कॉलम, और उनमें डेटा। मुझे लगता है कि मेरे पास समाधान है, धन्यवाद दोस्तों यहाँ। – Aron

उत्तर

3

sed -i 's/ */\;/g' your-file 

का उपयोग कर यह आपको इसे पारित फ़ाइल में एक ; के साथ हर 2 या अधिक रिक्त स्थान विकल्प होगा प्रयास करें।

6
$ sed 's/ */;/g' 
john doe 1900-01-01 california 
john doe;1900-01-01;california 
one space two spaces three spaces 
one space;two;spaces;three;spaces 
+0

यह भी काम करता है: 'sed' s/\ + /;/g'' (दो रिक्त स्थान और तीन रिक्त स्थान और तारांकन के बजाय एक बच निकला साइन चिह्न)। –

+0

@ डेनिस: यह आधुनिक आधुनिक कार्यान्वयन में सच है। दुर्भाग्यवश, जंगली में अभी भी संस्करण हैं जो '\ +' का समर्थन नहीं करते हैं इसलिए मैंने पोर्टेबिलिटी के हितों में एक ऑक्टेट बर्बाद कर दिया। जीएनयू 'sed' के लिए – msw

0

सबसे अच्छा तरीका उचित डेटाबेस (यानी ";") के साथ अपने डेटाबेस टेबल से पूछताछ करना सबसे अच्छा तरीका है। देखें कि क्या आप इसे इस तरह से कर सकते हैं। अन्यथा,

$ echo "john doe 1900-01-01 california" | sed 's/ /;/2g' 
john doe;1900-01-01;california 

यदि नाम में 3 या अधिक शब्द हैं तो यह तोड़ देगा।

+0

' 2 जी' काम करता है। जब आप किसी संख्या और 'g' का उपयोग करते हैं तो अन्य संस्करण अलग-अलग काम कर सकते हैं। इसके अलावा, ओपी के प्रश्न में कुछ गायब रिक्त स्थान थे क्योंकि इसे मूल रूप से पोस्ट किया गया था। एक संपादन ने इसे ठीक किया। –

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