जिस फ़ाइल में डॉट नहीं है, उससे लाइनें कैसे हटाएं?


10

मेरे पास एक फ़ाइल है जिसमें url सहित डेटा है। लेकिन विभिन्न लाइनें हैं जो उरल्स नहीं हैं। मैं उबंटू टर्मिनल कमांड का उपयोग करके उन्हें कैसे निकाल सकता हूं?

यहाँ संदर्भ के लिए नमूना फ़ाइल है: नमूना डेटा

com.blendtuts/S
°=
com.blengineering.www/:http
±=

मैं उत्पादन करना चाहता हूँ:

com.blendtuts/S
com.blengineering.www/:http

अतिरिक्त अवांछित लाइनों में कोई डॉट नहीं है। इसलिए, मैं डॉट्स के बिना लाइनों को हटाना चाहता हूं

जवाबों:


30

एक तरह से sed

sed '/\./!d' file
  • /\./मैच शाब्दिक बिंदु ( किसी भी पात्र से मेल खाने के \कारण बच गया .)
  • !d मिलान किए गए पैटर्न को छोड़कर सब कुछ हटा दें

यदि आप फ़ाइल को जगह में संपादित करना चाहते हैं, तो -iपरीक्षण के बाद कमांड में जोड़ें । (आप फ़ाइल का स्थानीय बैकअप बनाने के .bakलिए -iध्वज में भी जोड़ सकते हैं sed -i.bak ...।)

sed -i '/\./!d' file

26

आप एक नई फ़ाइल में डॉट के साथ सब कुछ प्राप्त कर सकते हैं:

grep "\."  file > newfile

इस तरह आप अपनी पुरानी फाइल को सेव कर सकते हैं।


10

या उन पंक्तियों को रखें जिनमें एक डॉट है ,

sed -ni.bak '/\./p' infile

8

मुझे लगता awkहै कि पार्टी में पिछले एक लापता है:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

यह क्षेत्र विभाजक को बिंदु पर सेट करता है। फिर, यह उन पंक्तियों को मुद्रित करने का मामला है जिनमें कम से कम दो फ़ील्ड हैं: इसका मतलब यह होगा कि कम से कम एक डॉट होता है।


3
एक सरल जाग समाधान घूंघट के रूप में एक ही नस में करना होगा: awk '/\./' file- अर्थात् , केवल चरित्र युक्त लाइनों को मुद्रित करने के लिए '।'।
क्रिस मिडगले

@ क्रिसमिडग्ली गुड वन! चूंकि यह grepपहले से ही सुझाए गए उत्तर के साथ है , मैंने कुछ-कुछ awkसामान के साथ जाना पसंद किया :)
फेडोराक्वि

6

पर्ल का उपयोग करना:

perl -i -ne 'print if /\./' /path/to/file

6

आप यह बहुत आसानी से विम के साथ कर सकते हैं। यदि आप पाठ संपादक के रूप में विम का उपयोग करने में सहज हैं (फाइल को खोलना, संपादित करना और लिखना), तो यह करें:

:g!/\./d

यदि आप विम का उपयोग करके सहज नहीं हैं, या आप इसे कमांड-लाइन टूल के रूप में उपयोग करेंगे, तो आप बस टर्मिनल से कर सकते हैं:

vim file -c "g!/\./d" -c "wq"

नई फ़ाइल में सहेजने के लिए आप इसे थोड़ा संशोधित कर सकते हैं:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

यह वीआईएम के "ग्लोबल" कमांड का उपयोग करता है, जो एक रेगेक्स से मेल खाने वाली (या मेल नहीं खाने वाली) हर लाइन पर एक पूर्व कमांड लागू करता है। इस मामले में, कमांड "(डी) ईटली" है, और यह रेगेक्स से मेल नहीं खाने वाले हर कमांड पर लागू होगा\.

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