मैं एक संख्यात्मक संगठनात्मक योजना के लिए अग्रणी शून्य की एक अलग संख्या जोड़ने के लिए मेरे sed सिंटैक्स को प्राप्त करने में परेशानी हो रही है। मैं जिस स्ट्रिंग्स पर काम कर रहा हूं, वह ऐसा प्रतीत होता है
1.1.1.1,Some Text Here
sed सिंटैक्स का लाभ उठाना
sed -r ":r;s/\b[0-9]{1,$((1))}\b/0&/g;tr"
मैं प्रतिक्रिया को प्राप्त करने में सक्षम हूं
01.01.01.01,Some Text Here
हालाँकि, मैं जिस चीज़ की तलाश कर रहा हूँ, वह 2 से 2 अंकों के शून्य को भरने के लिए कुछ है 2 और 3 और 3 के क्षेत्र में 4 अंक ताकि सभी आइटम एक मानक लंबाई के हैं [0-9] [0-9] { 2}। [0-9] {2}। [0-9] {3}
1.01.01.001,Some Text Here
मेरे जीवन के लिए मैं यह भी समझ नहीं पा रहा हूं कि किसी अवधि के बाद केवल अंकों के लिए स्नैप करने के लिए आवश्यक मापदंडों को शामिल करने के लिए सीमा को कैसे संशोधित किया जाए। मुझे लगता है कि इसका उपयोग \ b के साथ करने के लिए कुछ है जो मैं समझता हूं कि शब्द सीमा पर शून्य वर्णों से मेल खाता है, लेकिन मुझे समझ में नहीं आता है कि मैच में एक अवधि जोड़ने के मेरे प्रयास निम्नानुसार क्यों विफल हैं:
sed -r ":r;s/\.\b[0-9]{1,$((1))}\b/0&/g;tr"
sed -r ":r;s/\b\.[0-9]{1,$((1))}\b/0&/g;tr"
Both cause the statement to hang
sed -r ":r;s/\b[0-9]\.{1,$((1))}\b/0&/g;tr"
sed -r ":r;s/\b[0-9]{1,$((1))}\.\b/0&/g;tr"
sed -r ":r;s/\b[0-9]{1,$((1))}\b\./0&/g;tr"
cause the statement to output:
1.01.01.1,Some Text Here
इसके अतिरिक्त, मुझे उम्मीद है कि यदि वक्तव्य में पाठ शामिल है तो मुझे अतिरिक्त समस्याएं होंगी:
1.1.1.1,Some Number 1 Here
यह एक अग्रगामी निष्कर्ष है कि मुझे वास्तव में सेड और उसकी सभी जटिलताओं को सीखने की आवश्यकता है। मैं उस पर काम कर रहा हूं, लेकिन उम्मीद करता हूं कि यह विशेष वक्तव्य मुझे थोड़ी देर तक परेशान करता रहेगा। किसी भी तरह की सहायता का स्वागत किया जाएगा।
संपादित करें: मैंने एक तरीका निकाला है ... यह कथन वह है जो मैं देख रहा हूँ, लेकिन ऐसा करने के लिए एक और अधिक सुंदर तरीका होना चाहिए।
sed -r ':r;s/\b[0-9]{1,1}\.\b/0&/;tr;:i;s/\b[0-9]{1,2},\b/0&/;ti;s/.//'
इसके अलावा, यदि पाठ में एक समान संख्या स्वरूप दिखाई देता है, तो भी यह वाक्यगत रूप से समस्या उत्पन्न करेगा ... के समान:
1.1.1.1,Some Text Referring to Document XXX Heading 1.2.3
किस स्थिति में इसका परिणाम होगा:
1.01.01.001,Some Text Referring to Document XXX Heading 01.02.03
हल यहाँ आपकी मदद के लिए आप सभी को धन्यवाद। मैंने शुरू में नीचे दिए गए उत्तर के साथ समस्या को हल किया। मुझे लगता है कि पायथन में समाधान को एक बड़े समाधान के एक भाग के रूप में नीचे ले जाने के रूप में ले जाया गया है:
def getPaddedKey(line):
keyparts = line[0].split(".")
keyparts = map(lambda x: x.rjust(5, '0'), keyparts)
return '.'.join(keyparts)
s=sorted(reader, key=getPaddedKey)
printf
(या printf
अक्क के भीतर एक कॉल) अधिक सीधा हो सकता है।
sed -r ':r;s/\b[0-9]{1,1}\.\b/0&/;tr;:i;s/\b[0-9]{1,2},\b/0&/;ti;s/.//'
हालांकि, मुझे यह जानना अच्छा लगेगा कि क्या अधिक सुरुचिपूर्ण दृष्टिकोण है।