नोटपैड ++ में सभी पंक्तियों को हटा दें, एक शब्द की आवश्यकता वाली रेखाओं को छोड़कर?


201

मेरे पास एक टेक्स्ट फाइल है और मैं <Path>अन्य सभी लाइनों को हटाना चाहता हूं ।

मैं यह कैसे कर सकता हूं?



1
LineFilter2 प्लगइन का उपयोग करना भी आसान है।
कार्स्टन

जवाबों:


292

इसे प्राप्त करने का एक आसान तरीका है। आपको 3 चरण करने की आवश्यकता है।

  1. खोज मेनू> ढूंढें ...> "मार्क" टैब पर जाएं। नियमित अभिव्यक्ति को सक्रिय करें। के लिए खोजें ^<Path>( ^लाइन शुरू करने के लिए है)। "बुकमार्क लाइन्स" चेक करना न भूलें और "मार्क ऑल" दबाएं

    ==> सभी पंक्तियों को आप एक बुकमार्क रखना चाहते हैं

  2. मेनू "खोज - बुकमार्क - उल्टा बुकमार्क" पर जाएं

    ==> वह सभी पंक्ति जिसे आप हटाना चाहते हैं, बुकमार्क हैं।

  3. मेनू पर जाएं "खोज - बुकमार्क - बुकमार्क की गई लाइनें निकालें"

    ==> सभी बुकमार्क लाइनों को हटा दिया जाता है।


47
+1। अच्छा लगा, इस बारे में पता नहीं चला। "हटाए गए लाइनों को हटाएं" या "चिह्नित लाइनों को काट / कॉपी करें" के विकल्प भी हैं जो कुछ समय बचा सकते हैं।
deizel

6
मुझे पहली बार में परेशानी हुई क्योंकि नोटपैड ++ के मेरे संस्करण (6.2.3) में "मार्क टैब" नाम का मेनू आइटम नहीं है। इसके बजाय, आपको "खोज" -> "ढूंढें ..." पर जाना होगा -> टैब "मार्क" पर क्लिक करें। और आपको अब बुकमार्क को उलटना नहीं पड़ेगा। नोटपैड ++ में अब "अनमार्क की गई लाइनें हटाएं" है। लेकिन आपकी टिप ने मुझे बहुत मदद की! धन्यवाद!
14

22
आप चरण 2 को छोड़ सकते हैं, क्योंकि यह (कम से कम v6.4.5 के बाद) "हटाए गए अनचाहे लाइनों" को चुनना संभव है।
जूलियन

4
मैं इतने लंबे समय से नोटपैड ++ का उपयोग कर रहा हूं और मैंने पहले कभी नहीं जाना कि 'बुकमार्क' क्या हैं। कमाल है कि यह उपकरण कितना शक्तिशाली है और मैं इसके बारे में कितना कम जानता हूं।
डेन्यूबियन नाविक

आप एक जीनियस हैं। यह केवल एक और चौंकाने वाला उदाहरण है कि आप वास्तविक के लिए उपयोग किए जाने वाले टूल को कैसे जान सकते हैं।
मार्सेलो ग्रीची ने

67

यह वास्तव में 6.3 के रूप में दो चरणों में किया जा सकता है। मुझे लगता है कि यह पहले की तुलना में किया जा सकता है क्योंकि मेरे पास 5.9 थी जब मैंने पहली बार कोशिश की थी।

इस उत्तर के आधार के रूप में स्टेमा की पोस्ट का उपयोग करना। अब एक कम कदम है। लाइनों को चिह्नित करें और अचिह्नित लाइनों को हटा दें। किया हुआ। विस्तृत निर्देश का पालन करें।

  1. खोज मेनू "खोजें"। खोज संवाद में, "मार्क" टैब पर क्लिक करें। नियमित अभिव्यक्ति को सक्रिय करें। के लिए खोजें ^<Path>( ^लाइन शुरू करने के लिए है)। "बुकमार्क लाइन्स" चेक करना न भूलें और "मार्क ऑल" दबाएं

    ==> अब आप जो सभी पंक्तियाँ रखना चाहते हैं, उनके पास एक बुकमार्क है

  2. खोज मेनू -> बुकमार्क -> अचिह्नित लाइनों को हटा दें।

    ==> सभी गैर बुकमार्क लाइनों को हटा दिया जाता है।


3
यह मुझे 10 सेकंड का समय लगा जबकि दूसरे समाधान ने मुझे> 20 सेकंड का समय दिया। धन्यवाद!
ब्लैक

मुझे ^अपने खोज शब्द में जोड़ने की आवश्यकता नहीं थी , न ही नियमित अभिव्यक्ति का उपयोग करने की। आशा है कि यह किसी की मदद करता है।
sa_leinad

29

स्वच्छ रेगेक्स केवल समाधान

दो चरण

  1. रेगेक्स रिप्लेस

    (?!^.*test.*$)^.+
    

    अपने अनुरोधित पाठ के साथ परीक्षण को बदलें

  2. बदलने के

    [\r\n]{2,}
    

    साथ में \r\n

एकल चरण संस्करण

^(?!<Path>).*\r\nखाली स्ट्रिंग के साथ मैचों को बदलने के लिए उपयोग करें । सामान्यीकृत संस्करण होगा ^(?!.*?test).*\r\nयह फ़ाइल के अंत में खाली लाइन नहीं निकालेगा। अन्य सभी लाइनें हटा दी जाती हैं, जिसमें कई लगातार खाली लाइनें भी शामिल हैं।

स्पष्टीकरण:

  1. (?!)एक नकारात्मक रूप है। ^.*test.*$ संपूर्ण पंक्ति का चयन करता है जिसमें अनुरोधित पाठ होता है।

  2. [\r\n]{2,}किसी भी समय \r\nहोने वाली अधिक मेल खाता है तो एक बार यह विंडोज नई लाइन है। यदि आपके पास लिनक्स या कोई अन्य ऑपरेटिंग सिस्टम है, तो आपको इसके साथ गड़बड़ करना पड़ सकता है। दूसरा इसे एक वापसी लाइन के साथ बदलना है।


1
लोगों के लिए ध्यान दें: कभी-कभी लाइन के अंत के साथ regex (EOL) "काम नहीं करता है"। \r\nEOL पोस्ट में उल्लेख किया क्या विंडोज का उपयोग करता है और इसलिए या नहीं हो सकता आप के लिए क्या देख रहे है। अक्सर लिनक्स वातावरण पर यह सिर्फ \nया मैक वातावरण में होता है \r, इसलिए यदि आप किसी फाइल को या तो खींचते हैं, तो यह विंडोज स्टाइल ईओएल नहीं होगा। हालाँकि, यदि आप FileZilla और ASCII मोड ट्रिगर्स के माध्यम से डाउनलोड करते हैं, तो यह उन्हें वापस विंडोज EOL (जैसे ) \nमें बदल सकता है \r\n। इसलिए यदि रेगेक्स काम नहीं कर रहा है, तो "व्यू> शो सिंबल्स> शो एंड ऑफ लाइन" पर जाकर ईओएल स्टाइल की जांच करें। सीआर = \r। LF = \n
धापिन

5

यह मुझे सबसे आसान तरीका लगता है कि "फाइंड ऑल इन करेंट डॉक्यूमेंट" फीचर का उपयोग करें और फिर परिणाम को एक नई फाइल में कॉपी करें या सभी का चयन करें और वर्तमान में बदल दें।

इससे आपके टेक्स्ट वाली सभी लाइनें मिलेंगी और उन्हें सबसे नीचे सूचीबद्ध करें। बस खोज परिणाम पर राइट क्लिक करें और कॉपी / पेस्ट करें।


आपको प्रतिस्थापित करके पंक्ति संख्याओं को निकालना होगा \tLine [\d]*: । फिर भी एक शानदार जवाब।
नौमेनन

यह उन पंक्तियों के लिए काम नहीं करेगा जो इतनी चौड़ी हैं कि नोटपैड ++ इसे खोज परिणाम विंडो में काट देता है।
मास्टरजो 2

4

मेनू पर जाएं खोज -> खोजें ... -> नियमित अभिव्यक्ति को सक्रिय करें। "^ पथ " के लिए खोजें (^ लाइन प्रारंभ के लिए है)।

"सभी वर्तमान दस्तावेज़ में खोजें" बटन पर क्लिक करें।

"परिणाम खोजें" विंडो पैटर्न के सभी लाइनों के साथ दिखाई देगी। नोटपैड ++ में एक नए टैब पर कॉपी / पेस्ट करें।

इस नए टैब में,: मेनू खोज -> बदलें ... -> नियमित अभिव्यक्तियों को सक्रिय करें।

"खोजें क्या:" फ़ील्ड में, पैटर्न का उपयोग करें: "लाइन \ डी +:"। "इसके साथ बदलें:" फ़ील्ड खाली छोड़ दें।

"सभी बदलें" बटन पर क्लिक करें।


3

यह प्रदान करना कि आप वास्तव में <Path>फ़ाइल सिस्टम पथ से मेल खाना चाहते हैं और नहीं, आप पर्ल का उपयोग करके कमांड लाइन से यह कोशिश कर सकते हैं:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

यह विंडोज पर स्ट्रॉबेरी पर्ल के साथ काम करता है, इसलिए परिणाम के अनुसार समायोजित करें यदि आप उम्मीद नहीं करते हैं।


3

यह अनाड़ी है, लेकिन इसे सभी एक्सेल में=IF(LEFT(A1,6)="<Path>",A1,"") कॉपी करें, और फिर उस फॉर्मूले का उपयोग करें और कॉपी करें। फिर उस नोट को वापस Notepad ++ पर कॉपी करें। यह आदर्श नहीं है, लेकिन यह बहुत आसान है (यदि आपके पास एक्सेल है)। चेतावनी: यह इंडेंटेड लाइनों (स्तंभों को स्थानांतरित करेगा आदि) के साथ अच्छी तरह से काम नहीं करेगा।


जब इस कार्य को सीधे संभालने के कई तरीके हैं, तो आप विध्वंसक रूप से किसी अन्य एप्लिकेशन में कॉपी करना, वहां प्रक्रिया करना और वापस स्थानांतरित क्यों करना चाहेंगे?
बाल्ड्रिक

1

नोटपैड ++ के साथ जो आप चाहते हैं उसे करने का कोई आसान तरीका नहीं है। आपको VB में अपने कंप्यूटर या स्क्रिप्ट पर प्रोग्राम डाउनलोड करने की आवश्यकता होगी (मुझे लगता है कि आप विंडोज पर हैं)।

आप वह कर सकते हैं जो आप दो में से एक तरीके से चाहते हैं। सीड यूटिलिटी * निक्स पर एक पसंदीदा है और विंडोज के लिए ग्नूविन ( http://gnuwin32.sourceforge.net/packages/sed.htm ) पर महान लोगों से पाया जा सकता है । आप इस प्रोग्राम को डाउनलोड करेंगे, और फिर कमांड प्रॉम्प्ट से अपनी कमांड चलाएंगे।

सभी पंक्तियों को हटाएं जिनमें शामिल नहीं हैं:
sed -i '/^<PATH>/!d' file

एक नई फ़ाइल वाली सभी पंक्तियों को प्रिंट करें:
sed -n '/^<PATH>/p' file > newfile

मेरा सुझाव है कि आप उन पंक्तियों का उपयोग करें जिन्हें आप एक नई फ़ाइल में चाहते हैं। इसका कारण यह है कि आपको शायद पहली बार के आसपास रेगेक्स स्टेटमेंट नहीं मिलेगा। सेड यूटिलिटी रेगुलर एक्सप्रेशन बेसिक सिंटैक्स का उपयोग करती है ( http://www . अनियमित-expressions.info/reference.html पर संदर्भ देखें )। यदि कुछ एक * निक्स पथ (/ var / www) जैसा है, तो आपको अपने regex के काम करने के लिए / वर्ण से बचने की आवश्यकता होगी।

उदाहरण: sed -n '/^\/var\/www/p' file > newfile
यह उन सभी लाइनों को प्रिंट करेगा जो '/ var / www' से शुरू होती हैं। यदि मैं / वर्ण से बचने के लिए दायर करता हूं, तो कमांड में एक त्रुटि होगी। आप बैकस्लैश कैरेक्टर \ के साथ एक विशेष चरित्र (जैसे / /) से बच सकते हैं।


यह एक पुराना उत्तर हो सकता है, लेकिन चूंकि इसमें वास्तव में अविश्वसनीय रूप से 2 वोट हैं (-1 अब मुझसे) यह टिप्पणी करना चाहता था कि यह कितना गलत है, लेकिन एक सिंघल कमांड ऑपरेशन में दोहराएं कि मैंने कैसे (फिर से) एक 100k लाइन ली इस फ़ाइल में एक शब्द (या वाक्यांश) वाली 34 पंक्तियों को लॉग करें, इस त्रुटि को 3 सेकंड से कम समय में केवल इस त्रुटि को FIND WHAT में रखकर: ^ ((?!? *? error)। * \ r \ _ n और रिक्त स्थान को छोड़कर, और "नई मेल खाता" का चयन न करें और "सभी का मिलान करें" पर क्लिक करें। हाँ, मुझे भी sed और awk से प्यार है, लेकिन यह कहना कि NPP ऐसा नहीं कर सकता है, यह सिर्फ झूठ है।
कोलिन चाफिन

1

रेगेक्स की जगह बेहतर समाधान:

(?!^.*SOMETEXT.*$)^.+\r?\n

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


1
सुपर उपयोगकर्ता में आपका स्वागत है! यह जानने के लिए कि जो रेगेक्स के प्रत्येक बिट को नहीं जानते हैं, उन्हें यह समझाने की परवाह करें? :)
बर्टिब

0

खोज का उपयोग करें -> बदलें और एक नियमित अभिव्यक्ति की तरह दर्ज करें ^[^ ].*और सभी का उपयोग करके खाली स्ट्रिंग के साथ बदलें Regular expression। अगला चरण खाली लाइनों के लिए खोज को मिल रहा है \n\nके साथ की जगह \nका उपयोग कर Extendedजब तक कई बार 0 occurrences were found.(उपयोग \r\n\r\nऔर \r\nफ़ाइल स्वरूप के आधार पर)। यदि आपके पास एक पंक्ति में बहुत सारी खाली लाइनें हैं, तो यह उपयोग करने के लिए तेज है \n\n\n\n\n\n\nया अधिक \n: खोज स्ट्रिंग में एस।

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