चलो कोशिश करते हैं को लागू करने के लिए sed कमान
पर विचार हमें एक नमूना CSV फ़ाइल में निम्न सामग्री:
$ cat file
Solaris,25,11
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
- को दूर करने के लिए 1 क्षेत्र या स्तंभ :
$ sed 's/[^,]*,//' file
25,11
31,2
21,3
45,4
12,5
यह नियमित अभिव्यक्ति खोज के लिए एक दृश्य के गैर-अल्पविराम([^,]*) वर्ण और उन्हें हटाता में जो परिणाम 1 क्षेत्र में हो रही हटा दिया ।
- प्रिंट करने के लिए केवल पिछले क्षेत्र में, या दूर के सभी क्षेत्रों को छोड़कर पिछले क्षेत्र:
$ sed 's/.*,//' file
11
2
3
4
5
इस regex निकालता है सब कुछ जब तक पिछले अल्पविराम(.*,) में जो परिणाम को हटाने के सभी क्षेत्रों को छोड़कर पिछले क्षेत्र है.
- प्रिंट करने के लिए केवल 1 क्षेत्र:
$ sed 's/,.*//' file
Solaris
Ubuntu
Fedora
LinuxMint
RedHat
इस regex(,.*) को हटा अक्षर से शुरू 1 अल्पविराम जब तक अंत में जिसके परिणामस्वरूप को हटाने के सभी क्षेत्रों को छोड़कर पिछले क्षेत्र है.
- हटाने के लिए 2 क्षेत्र:
$ sed 's/,[^,]*,/,/' file
Solaris,11
Ubuntu,2
Fedora,3
LinuxMint,4
RedHat,5
Regex (,[^,]*,) खोजों के लिए एक अल्पविराम और पात्रों के अनुक्रम के द्वारा पीछा किया, एक अल्पविराम में जो परिणाम मिलान 2 कॉलम, और जगह यह पैटर्न मिलान के साथ सिर्फ एक अल्पविराम है, अंत में समाप्त हटाने 2 कॉलम.
नोट: नष्ट करने के लिए खेतों के बीच में हो जाता है और अधिक मुश्किल में एसईडी के बाद से हर क्षेत्र में किया जा करने के लिए मिलान सचमुच.
- प्रिंट करने के लिए केवल 2 क्षेत्र:
$ sed 's/[^,]*,\([^,]*\).*/\1/' file
25
31
21
45
12
Regex से मेल खाता है, पहला क्षेत्र है, दूसरा क्षेत्र और बाकी है, हालांकि समूहों 2 क्षेत्र अकेले. पूरी लाइन है अब के साथ प्रतिस्थापित 2 क्षेत्र(\1), इसलिए केवल 2 क्षेत्र में प्रदर्शित किया जाता है.
- केवल प्रिंट लाइनों में जो अंतिम स्तंभ है एक एकल अंकों की संख्या:
$ sed -n '/.*,[0-9]$/p' file
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
Regex (,[0-9]$) की जाँच के लिए एक एकल अंक में पिछले क्षेत्र और p आदेश प्रिंट लाइन से मेल खाता है जो इस हालत है ।
- नंबर करने के लिए सभी लाइनों फ़ाइल में:
$ sed = file | sed 'N;s/\n/ /'
1 Solaris,25,11
2 Ubuntu,31,2
3 Fedora,21,3
4 LinuxMint,45,4
5 RedHat,12,5
इस का अनुकरण है बिल्ली -एन कमान. ऑक करता है, यह आसानी से उपयोग विशेष चर NR. को '=' की कमान sed देता है लाइन की संख्या हर पंक्ति के द्वारा पीछा लाइन में ही है । Sed उत्पादन पहुंचाया है दूसरे करने के लिए sed आदेश में शामिल होने के लिए हर 2 पंक्तियाँ.
- पिछले बदलने के द्वारा क्षेत्र 99 अगर 1 क्षेत्र है 'उबन्टु':
$ sed 's/\(Ubuntu\)\(,.*,\).*/\1\299/' file
Solaris,25,11
Ubuntu,31,99
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
इस regex से मेल खाता 'उबन्टु' और अंत तक पिछले छोड़कर स्तंभ और समूहों में से प्रत्येक के रूप में उन्हें अच्छी तरह से. में प्रतिस्थापन भाग के लिए, 1 और 2 के समूह के साथ-साथ नए नंबर 99 प्रतिस्थापित है.
- हटाना 2 क्षेत्र अगर 1 क्षेत्र है 'RedHat':
$ sed 's/\(RedHat,\)[^,]*\(.*\)/\1\2/' file
Solaris,25,11
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,,5
1 क्षेत्र 'RedHat', 2 क्षेत्र और शेष क्षेत्रों में वर्गीकृत कर रहे हैं, और प्रतिस्थापन के साथ किया जाता है, केवल 1 और पिछले समूह , resuting में हो रही 2 क्षेत्र नष्ट कर दिया ।
- सम्मिलित करने के लिए, एक नया स्तंभ पर अंत(अंतिम स्तंभ) :
$ sed 's/.*/&,A/' file
Solaris,25,11,A
Ubuntu,31,2,A
Fedora,21,3,A
LinuxMint,45,4,A
RedHat,12,5,A
Regex (.*) मैच पूरी लाइन और यह जगह के साथ लाइन में ही (&) और नए क्षेत्र.
- सम्मिलित करने के लिए, एक नए स्तंभ की शुरुआत में(1 कॉलम):
$ sed 's/.*/A,&/' file
A,Solaris,25,11
A,Ubuntu,31,2
A,Fedora,21,3
A,LinuxMint,45,4
A,RedHat,12,5
वही के रूप में पिछले उदाहरण के लिए, बस लाइन मिलान के द्वारा पीछा किया जाता है नया स्तंभ
मुझे आशा है कि यह मदद मिलेगी. मुझे पता है अगर आप की जरूरत का उपयोग करने के लिए ऑक या किसी भी अन्य आदेश.
धन्यवाद
sed -Ei "$rownum s/$newvalue/$col" file.csv
और इसे फेंक दिया एक त्रुटि के बारे में अधिक जानते हैं । किसी संसाधन को पढ़ने के लिए पर उपयोगी हो जाएगा के रूप में अच्छी तरह से.