मैं विजुअल स्टूडियो कोड में डुप्लिकेट लाइनों को कैसे हटा सकता हूं?


118

कहो कि आपके पास निम्नलिखित पाठ है:

abc
123
abc
456
789
abc
abc

मैं सभी "एबीसी" लाइनों को हटाना चाहता हूं और बस एक रखना चाहता हूं। मैं छँटाई नहीं करता। परिणाम इस तरह होना चाहिए:

abc
123
456
789

जवाबों:


223

यदि लाइनों का क्रम महत्वपूर्ण नहीं है

लाइनों को वर्णानुक्रम में क्रमबद्ध करें, यदि वे पहले से ही नहीं हैं, और इन चरणों को निष्पादित करें:
(इस संबंधित प्रश्न पर आधारित: मैं कैसे नियमित एक्सप्रेशन का उपयोग करके फ़ाइल से डुप्लिकेट लाइनें ढूंढता हूं और हटा सकता हूं? )

  1. Control+F

  2. "मोड बदलें" टॉगल करें

  3. "नियमित अभिव्यक्ति का उपयोग करें" टॉगल करें (प्रतीक के साथ आइकन .*)

  4. में खोज क्षेत्र, टाइप करें^(.*)(\n\1)+$

  5. " बदलें " फ़ील्ड के साथ , टाइप करें$1

  6. क्लिक करें बदलें सभी बटन("सभी को बदलें")।

यदि लाइनों का क्रम महत्वपूर्ण है तो आप सॉर्ट नहीं कर सकते

इस मामले में, या तो वीएस कोड के बाहर एक समाधान का सहारा लें ( यहां देखें ), या - यदि आपका दस्तावेज़ बहुत बड़ा नहीं है और आप रिप्लेसमेंट ऑल बटन को स्पैम करने का बुरा नहीं मानते हैं - पिछले चरणों का पालन करें, लेकिन चरण 4 और 5 में। इन्हें दर्ज करें:
( बिना छँटाई के विशिष्ट डुप्लिकेट लाइनें निकालें )

सावधानी: बहुत सी लाइनों (1000+) के साथ फ़ाइलों के लिए ब्लॉक; दुर्घटना के कारण वीएस कोड हो सकता है; कुछ मामलों में रिक्त लाइनें पेश कर सकते हैं।

  • खोज :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?

  • इसके साथ बदलें :$1

और फिर "सभी को बदलें" बटन पर क्लिक करें क्योंकि कई बार डुप्लिकेट घटनाएं होती हैं

जब आप बटन पर क्लिक करेंगे तो आपको पता चल जाएगा कि लाइन की गिनती कम हो गई है। उस पर नज़र रखने के लिए दस्तावेज़ की अंतिम पंक्ति पर नेविगेट करें।


4
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?मेरी vscode दुर्घटना बनाया .... मैं एक फ़ाइल 229 लाइनों में एक खोज किया था। :(
Hickory420

@ Hickory420 मैंने अपनी मशीन में 1000 लाइनों (20-चार लंबी, यादृच्छिक) के साथ परीक्षण किया और कोई दुर्घटना नहीं हुई, लेकिन वास्तव में प्रत्येक पास पर कुछ सेकंड के लिए 100% सीपीयू लोड के साथ एक थ्रेड ब्लॉक। हाँ, यह बड़ी फ़ाइलों के लिए शायद ही व्यावहारिक है।
मार्क.2377

इसके लिए धन्यवाद। क्या आप कृपया रेगेक्स की व्याख्या कर सकते हैं ^(.*)(\n\1)+$। डुप्लिकेट पंक्तियों को हटाने के बाद मैं csv में डुप्लिकेट पहले कॉलम वाली सभी पंक्तियों को देखना चाहता हूं और regex को संशोधित करना चाहता हूं।
उर्वाह शब्बीर

1
वाह मुझे लगता है मैं regex में बहुत अच्छा हूँ और यह अभी भी मेरे दिमाग उड़ा दिया, महान जवाब !!
इलेक्ट्रोविर

@UrvahShabbir, regex के उस टुकड़े के लिए एक स्पष्टीकरण लिंक किए गए प्रश्नोत्तर में दिया गया है । मेरा केवल इसमें अलग है कि \r?दूसरे उत्तर से बिट वास्तव में आवश्यक नहीं है।
मार्क.2377

66

यहां एक बहुत ही रोचक विस्तार है: ट्रांसफार्मर

विशेषताएं:

  • अनोखी लाइनें
  • नए दस्तावेज़ के रूप में अनूठी लाइनें
  • फ़िल्टर लाइनें
  • नए दस्तावेज़ के रूप में फ़िल्टर लाइनें
  • लाइनों को क्रमबद्ध करें
  • लंबाई के आधार पर क्रमबद्ध करें
  • कर्सर को संरेखित करें
  • CSV को संरेखित करें
  • कॉम्पैक्ट CSV
  • नए दस्तावेज़ को कॉपी करें
  • लाइन्स चुनें
  • JSON के रूप में लाइन्स
  • ट्रिम लाइनों
  • नए दस्तावेज़ के रूप में डुप्लिकेट लाइनें गिनें
  • मैक्रो

डुप्लिकेट लाइनों को हटाने के लिए:

  • दस्तावेज़ से डुप्लिकेट लाइनें निकालता है

  • यदि कोई चयन नहीं है, तो चयन या वर्तमान ब्लॉक पर कार्य करता है

मैंने इसके साथ "यूनीक लाइन्स" कमांड के अलावा बहुत कुछ नहीं खेला है, लेकिन यह काफी अच्छी तरह से किया जाता है (मैक्रो मेनू का प्रयास करने सहित)।


26

@ Marc.2377 के उत्तर में जोड़ने के लिए।

यदि आदेश महत्वपूर्ण है और आप इस बात की परवाह नहीं करते हैं कि आप केवल डुप्लिकेट लाइनों में से अंतिम को बनाए रखते हैं, तो बस निम्नलिखित regexp की खोज करें यदि आप केवल गैर-खाली लाइनों को हटाना चाहते हैं

^(.+\n)(?=(?:.*\n)*?\1)

अगर आप भी डुप्लिकेट खाली लाइनों को हटाना चाहते हैं, तो *इसके बजाय उपयोग करें+

^(.*\n)(?=(?:.*\n)*?\1)

और कुछ भी नहीं के साथ बदलें।

भरे हुए खोज-और-बदलें बॉक्स का स्क्रीनशॉट

यह एक लाइन लेगा और कुछ और (शायद 0) लाइनों को आगे बढ़ाने की कोशिश करेगा, इसके बाद ली जाने वाली सटीक लाइन। यह ली गई लाइन को हटा देगा।

यह सिर्फ एक-शॉट रेगेक्स है। प्रतिस्थापित बटन को स्पैम करने की आवश्यकता नहीं है।


अच्छी तरह से रसीला
angus l

4
अच्छा लगा। मैं ^(.+\n)(?=(?:.*\n)*?\1)इसके बजाय अनुशंसा करता हूं क्योंकि आपके रेगेक्स ने एक खाली लाइन हटा दी थी जहां इसकी उम्मीद नहीं थी। वैसे भी अपवित्र।
मार्क.2377

अच्छी पकड़… OTOH: डुप्लिकेट खाली लाइनें भी डुप्लिकेट हैं;)
Skeeve

1
@ शकीव चलो, यह उर उपयोगी उत्तर के लिए बस थोड़ा सा धन्यवाद और सभी बेहतर समुदाय के लिए :)
ज़मान

1
xxx(?=…)एक लुकहेड-मैच है। तो यह सुनिश्चित करता है कि, जो कुछ भी "xxx" मैचों "..." का अनुसरण करता है, लेकिन खोज को आगे नहीं बढ़ाता है। (?:…)सिर्फ एक ब्रैकेट है, जो ब्रैकेट की गिनती में नहीं आता है। .*\n(संभवतः खाली) लाइन के लिए एक पैटर्न है। *इसका मतलब है कि कई लाइनें हो सकती हैं, यहां तक ​​कि कोई भी नहीं। ?तारांकन के बाद ( *) का अर्थ है हम जल्द से कुछ लाइनों के रूप में चाहते हैं। जैसा कि \1इस अभिव्यक्ति का प्रभाव यह है कि हम उन सभी रेखाओं के लिए आगे देखते हैं जो \1तब तक मेल नहीं खातीं जब तक हम एक रेखा मिलान नहीं करते \1। मुझे उम्मीद है कि यह स्पष्ट हो जाएगा।
Skeeve

22

मेरे पास बस यही मुद्दा था और विजुअल स्टूडियो कोड पैकेज "सॉर्ट लाइन्स" मिला। विवरणों के लिए विज़ुअल स्टूडियो कोड मार्केट प्लेस देखें (जैसे क्रमबद्ध लाइनें )।

इस पैकेज में विकल्प "सॉर्टिंग लाइन्स (अद्वितीय)" है, जो मेरे लिए था। लाइनों की शुरुआत / अंत में किसी भी सफेद स्थान का ध्यान रखें। वे प्रभावित करते हैं कि क्या लाइनें अद्वितीय मानी जाती हैं या नहीं।


marketplace.visualstudio.com/… को भी काम करना चाहिए।
केसीआर

1
ऐसा लगता है कि एक्सटेंशन में अब डुप्लिकेट प्रविष्टियों को हटाने की क्षमता नहीं है। @ मार्क -2377 के उत्तर के साथ इसे जोड़कर मेरे लिए चाल चल रहा है।
दान एटकिन्सन

12

DupChecker एक्सटेंशन स्थापित करें , हिट करें F1, और "डुप्लिकेट जांचें" टाइप करें।

यह डुप्लिकेट की जांच करेगा और पूछेगा कि क्या आप उन्हें हटाना चाहते हैं।



-3

वास्तव में विजुअल स्टूडियो कोड में नहीं है, लेकिन अगर यह काम करता है, तो यह काम करता है।

  1. एक नया एक्सेल स्प्रेडशीट खोलें
  2. डेटा को एक कॉलम में पेस्ट करें
  3. डेटा टैब पर जाएं
  4. डेटा का कॉलम चुनें (यदि आप पहले से नहीं है)
  5. डुप्लिकेट निकालें पर क्लिक करें (कुछ बार के बीच में)
  6. OKडुप्लिकेट को निकालने के लिए क्लिक करें ।

यह सबसे अच्छा जवाब नहीं है, जैसा कि आपने विज़ुअल स्टूडियो कोड निर्दिष्ट किया है, लेकिन जैसा कि मैंने कहा: यदि यह काम करता है, तो यह काम करता है :)


आप इसे एक स्क्रिप्ट प्रदान करके अधिक प्रासंगिक बना सकते हैं जिसे सीधे विजुअल स्टूडियो कोड से बुलाया जा सकता है। आदेश शब्दों में, इस प्रक्रिया को स्वचालित करता है। मुझे नहीं पता कि क्या यह संभव है, लेकिन एक स्क्रिप्ट जो एक्सेल को उसके उजागर COM इंटरफेस के माध्यम से आमंत्रित करेगी। यह इस उत्तर को और अधिक मूल्यवान बना देगा क्योंकि यह अन्य अनुप्रयोगों को साफ-सुथरा करने के लिए एक उदाहरण होगा।
पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.