sed - बाहरी फ़ाइल से पैटर्न लेने वाली लाइनें हटाएं


1

मैं बाहरी फ़ाइल से पैटर्न लेने वाली फ़ाइल में कुछ पंक्तियों को हटाने का तरीका ढूंढ रहा हूं। सबसे अच्छा तरीका सेड का उपयोग करना होगा। मैं इस तरह से कई लेखों की कोशिश कर रहा था , लेकिन वे मेरे काम का जवाब नहीं देते हैं।

कहो मेरे पास एक पाठ है।

Adam
Belle
Candy
Donald
Eve

और एक पैटर्न है।

Don*
Candy

साथ grep -fv pattern.file text.fileमैं वास्तव में मैं क्या चाहते हैं, लेकिन केवल देखने में मिलता है:

Adam
Belle
Eve

मैं फ़िल्टर की गई आउटपुट को एक नई फ़ाइल पर पुनर्निर्देशित नहीं कर सकता। इसलिए, मुझे मूल पाठ को संशोधित करने में सक्षम होने की आवश्यकता है । बाहरी फ़ाइल से पैटर्न (एस) से मेल खाने वाली सभी पंक्तियों को हटा दें।

मेरे असली usecase में text.file में गैर- अल्फ़ाबेटिकल ऑर्डर होता है, हमेशा कैपिटल नहीं किया जाता है, इसलिए 'sed' के लिए जेनेरिक रेगेक्स बनाना संभव नहीं है।

बाहरी फ़ाइल से लाइनों को हटाने के लिए पैटर्न पास करने के लिए सबसे अच्छा तरीका क्या होगा?


आप आउटपुट को नई फ़ाइल पर पुनर्निर्देशित क्यों नहीं कर सकते? sed -iवैसे भी पर्दे के पीछे एक नई फ़ाइल बनाता है।
कोरोबा

@choroba - विशेषाधिकारों की हानि। केवल संशोधित कर सकते हैं
फेसलेस

1
तो हो सकता है sponge, आउटपुट को उसी फ़ाइल पर पुनर्निर्देशित करें ।
कामिल मैकियोरोस्की

1
यह काम कर सकता है:grep -vf pattern.file text.file >foo; cp foo text.file & rm foo
साइरस

जवाबों:


1

GNU सेड और बैश के साथ:

sed -i -f <(sed 's|.*|/&/d|' pattern.file) text.file

इस तरह के काम करता है, लेकिन सही कारणों के लिए जरूरी नहीं है। (1) यह एक अनएन्चर्ड मैच करता है, इसलिए यदि पैटर्न फ़ाइल में "एलेक्स" है, तो यह टेक्स्ट फाइल से "अलेक्जेंडर" और "एलेक्जेंड्रा" को हटा देगा। (२) यह अपेक्षा करता है कि पैटर्न नियमित अभिव्यक्ति हो। यह ऐसा नहीं दिखता है कि ओपी का इरादा क्या है। उदाहरण के लिए, दिए गए पैटर्न फ़ाइल के लिए, "डगलस" को हटा दिया जाएगा, क्योंकि Don*इसमें किसी भी रेखा से मेल खाता है Do। (यदि ऐसा होता है कि स्ट्रिंग से nकोई फर्क नहीं पड़ता, तो इससे कोई फर्क नहीं पड़ता।) (3) उपयोगकर्ता को चेतावनी दी जानी चाहिए कि, यदि पैटर्न फ़ाइल में स्लैश हैं ( /), तो यह विफल हो जाएगा।
स्कॉट

धन्यवाद @ साइरस, यह वही है जो मैं देख रहा था! स्कॉट, कि आप के रूप में अच्छी तरह से, प्रदान की गई उत्तर मेरे विशेष पैटर्न प्रबंधन के अनुरूप है, लेकिन मैं आपके नोटों को ध्यान में रखूंगा।
फेसलेस

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