2015-11-28 6 views
5

पैटर्न के साथ एक रेखा को हटाकर मैं एक फ़ाइल में लाइनों का गुच्छा हटाने की कोशिश कर रहा हूं यदि वे एक विशेष पैटर्न के साथ मेल खाते हैं जो परिवर्तनीय है।पर्ल एक-लाइनर:

मैं एक लाइन जो abc12, abc13 साथ मेल खाता है, आदि

मैं एक सी खोल स्क्रिप्ट लिख करने की कोशिश की नष्ट करने के लिए कोशिश कर रहा हूँ, और इस कोड है:

**!/bin/csh 
    foreach $x (12 13 14 15 16 17) 
    perl -ni -e 'print unless /abc$x/' filename 
    end** 

यह नहीं है काम, लेकिन जब मैं एक चरखी (abc12) के बिना एक लाइनर का उपयोग करता हूं, यह काम करता है।

मुझे यकीन नहीं है कि पैटर्न मिलान के साथ कुछ गड़बड़ है या यदि कुछ और है तो मुझे याद आ रही है।

+0

'पर्ल मैं -ne '/ ABC1 [234,567]/या प्रिंट' filename' –

उत्तर

8

हां, यह तथ्य है कि आप सिंगल कोट्स का उपयोग कर रहे हैं। इसका मतलब है कि $x का शाब्दिक अर्थ है।

बेशक

, तो आप कर रहे हैं भी बहुत अकुशलता से यह कर रही है, क्योंकि आप प्रत्येक फ़ाइल को कई बार संसाधित कर रहे हैं।

आप लाइनों abc12abc17 करने के लिए आप एक ही बार में सभी ऐसा कर सकते हैं दूर करने के लिए देख रहे हैं:

perl -n -i.bak -e 'print unless m/abc1[234567]/' filename 
+0

धन्यवाद यह काम करता हैं । – shiva1987

+0

आदर्श रूप से यदि आपके पास कोई जवाब है जो आपकी आवश्यकताओं को पूरा करता है, तो आपको इसे स्वीकार करना चाहिए। (पक्ष द्वारा उस छोटे से टिक) – Sobrique

+0

क्षमा करें, मुझे नहीं पता था, मैं यहाँ नया हूँ, टिप के लिए धन्यवाद। – shiva1987