पंक्ति में अल्पविराम हटाएं


10

मैं बैश में ट्रेलिंग कॉमा का एक सेट कैसे हटाऊं:

a,b,c,d,,,,
1,2,3,,,,

वांछित आउटपुट:

a,b,c,d
1,2,3

ऐसा करने की कोशिश की:

 grep "5628" test.csv | sed 's/,*$//g'

लेकिन यह काम नहीं करता है। फ़ाइल मूल रूप से एक विंडोज मशीन से आई है।


2
क्या आप सुनिश्चित हैं कि यह काम नहीं किया? आपने पूरा कमांड क्या चलाया?
15

सकारात्मक। यह नहीं था
1529

क्या आप अपना सटीक आदेश प्रदान कर सकते हैं, कृपया ( sedआपने फ़ाइल नाम के बिना दिखाया गया फ़िल्टर के रूप में कार्य करता है और किसी फ़ाइल को संसाधित नहीं करता है )
roaima

grep "5628" test.csv | sed 's /, * $ // g'
user2980702

2
यदि आपको फ़ाइल को * निक्स में उपयोग करने की आवश्यकता है और आपको इसे विंडोज पर वापस कॉपी करने में सक्षम होने की आवश्यकता नहीं है, तो सीआर / एलएफ से एनएल के साथ लाइन एंडिंग को रूपांतरित करने के लिए लंबे समय में आसान हो सकता है dos2unixया ऐसा कुछ। ।
जी-मैन का कहना है मोनिका '

जवाबों:


13

आपके द्वारा प्रदत्त कमांड को फिर से करें:

grep "5628" test.csv | sed 's/,*$//g'

यह सभी अनुगामी अल्पविरामों को हटाते हुए '5628' से मेल खाते हुए लाइनों को आउटपुट करेगा। यह फ़ाइल को अपडेट नहीं करेगा test.csv

हालाँकि, आपने संकेत दिया कि फाइल विंडोज मशीन से आई है, इसलिए लाइन एंडिंग सिर्फ NL के बजाय CR / NL हैं। नतीजा यह है कि लाइन के अंत में एक छिपा हुआ सीआर है, और आपको इसके बजाय एक कमांड लाइन की आवश्यकता है:

grep "5628" test.csv | sed 's/,*\r*$//'

वास्तव में, आप इसे केवल एक कमांड के लिए कर सकते हैं:

sed -n '/5628/s/,*\r*$//p' test.csv

मैं जगह अद्यतन करने की कोशिश नहीं कर रहा हूँ। बस कॉमा के बिना आउटपुट की आवश्यकता है
user2980702

इसने आपको बहुत धन्यवाद दिया। इसलिए हम फ़ाइल के अंत में (\ r * $) गाड़ी वापसी से पहले कई कॉमा (, *) की तलाश कर रहे हैं। क्या मैं सही हू ?
15:29 बजे user2980702

\r*शून्य या अधिक CR वर्णों की अनुमति देता है (इसलिए यह यूनिक्स / लिनक्स व्युत्पन्न फाइलों के साथ काम करना जारी रखेगा)। मैं \r?एक एकल वैकल्पिक सीआर को इंगित करने के लिए उपयोग करना चाहता हूं, लेकिन मुझे sedयह बताने के लिए ध्वज को याद नहीं है कि मेरे सिर के ऊपर से ईआरई का उपयोग कर सकते हैं। मुझे लगता है कि यह -rयहां नहीं है। ,*तुम्हारा और मैचों शून्य या अधिक अल्पविराम का है।
रोजा 15:

gइस मामले में की जरूरत नहीं है, Ter केवल 1 अंत तक निर्दिष्ट है$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(ओपी नहीं है जो केवल अनुगामी कोमा को हटाने के लिए कहता है) यह एक पाइपिंग प्रक्रिया से बचता है, सीधे फिल्टर और रूपांतरण लेने वाली सेड

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