[संपादित करें: फिक्स्ड खाली स्थान के ट्रिमिंग]
[संपादित करें # 2: पट्टी फ़ाइल के अंत से रिक्त लाइनों अनुगामी]
perl -i.bak -pe 'if (defined $x && /\S/) { print $x; $x = ""; } $x .= "\n" x chomp; s/\s*?$//; 1 while s/^(\t*) /$1\t/; if (eof) { print "\n"; $x = ""; }' **/*(.)
यह स्ट्रिप्स फ़ाइल से पिछली रेखाओं को पीछे छोड़कर, लेकिन फ़ाइल के अंत में बिल्कुल एक \n
छोड़ देता है। अधिकांश टूल इसकी अपेक्षा करते हैं, और यह अधिकांश संपादकों में रिक्त रेखा के रूप में दिखाई नहीं देगा। हालांकि यदि आप उस अंतिम \n
को पट्टी करना चाहते हैं, तो बस आदेश से print "\n";
भाग हटाएं।
आदेश "सहेजने" द्वारा काम करता है \n
वर्ण जब तक कि एक गैर-खाली वर्ण वाली रेखा दिखाई न दे - तब यह उस पंक्ति को संसाधित करने से पहले सभी को प्रिंट करता है।
\s*?
मैचों शून्य या अधिक खाली स्थान के पात्रों गैर लालच से, \r
, जो \r\n
डॉस लाइन का पहला वर्ण है सहित निकालें .bak
मूल फाइल का बैकअप बनाने से बचने के लिए (अपने जोखिम पर उपयोग!) सिंकैक्स-स्क्रैप करें। पर्ल में, $
या तो लाइन के अंत में या अंतिम \n
से पहले मेल खाता है, इसलिए इस तथ्य के साथ संयुक्त *?
गैर-लालची से मेल खाता है (पहले 0-चौड़ाई मैच का प्रयास कर रहा है, फिर 1-चौड़ाई वाला मैच और इसी तरह) यह सही बात करता है।
1 while s/^(\t*) /$1\t/
केवल एक लूप है जो किसी भी संख्या के टैब से शुरू होने वाली किसी भी पंक्ति को बार-बार बदल देता है, इसके बाद 4 रिक्त स्थान के साथ एक और टैब के साथ होता है, जब तक यह अब संभव नहीं होता है।तो यह सब \t
पात्रों एक स्तंभ द्वारा 4.
विभाज्य मैंने पहले **/*(.)
वाक्य रचना नहीं देखा है पर शुरू बशर्ते भले ही कुछ लाइनों आंशिक रूप से पहले से ही टैब के लिए बदल दिया गया है काम करेंगे, संभवतः है कि एक zsh
विस्तार है? अगर यह sed
के साथ काम करता है, तो यह perl
के साथ काम करेगा।
स्रोत
2011-02-16 01:56:13
**/* (।) एक zsh ग्लोब है। यह कई फाइलों पर कार्रवाई करने का एक और तरीका है। ताकि प्रत्येक फ़ाइल के लिए एक बार पर्ल स्टेटमेंट निष्पादित किया जाएगा। – jhogendorn
इसके अलावा, यह काम नहीं करता है? यह सभी सफेद जगहों, नई लाइनों, सब कुछ हटा देता है। – jhogendorn
अरे! इसे अभी फिक्स्ड किया और इसका परीक्षण किया। –