2011-05-13 7 views
6

मैं एक पर्ल एक-लाइनर लिखना चाहता हूं जो दृश्यमान स्थान पर किसी भी प्रभाव के साथ रिक्त स्थान के साथ मौजूदा निर्देशिका में टेक्स्ट फ़ाइलों के बैच में सभी टैब '\ t' को प्रतिस्थापित करता है।रिक्त स्थान के साथ टैब को प्रतिस्थापित करने के लिए पर्ल प्रोग्राम

क्या कोई मुझे दिखा सकता है कि यह कैसे करें?

उत्तर

22

यह FAQ में है:

1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; 

या फिर आप Text::Tabs मॉड्यूल (मानक पर्ल वितरण का हिस्सा) का उपयोग कर सकते हैं।

use Text::Tabs; 
@expanded_lines = expand(@lines_with_tabs); 
+5

+1: 'perldoc -q tab' – toolic

5

perl -p -i -e 's/\t/ /g' file.txt एक तरह से इस

+0

आप शायद, regexp का हिस्सा की जगह में एक से अधिक स्थान चाहते हैं, हालांकि –

+0

सच चाहते हैं - यह बदल दिया है। – kuriouscoder

12

आप इस के लिए एक पर्ल एक लाइनर की जरूरत नहीं है करने के लिए हो सकता है, आप expand बजाय इस्तेमाल कर सकते हैं:

विस्तार उपयोगिता करेगा अक्षरों के साथ मानक आउटपुट में फाइलें या मानक इनपुट लिखें, अगले टैब स्टॉप पर पैड के लिए आवश्यक एक या अधिक वर्णों के साथ प्रतिस्थापित किया गया है।

expand उपयोगिता भी टैब के प्रबंधन का ख्याल रखेंगे आप के लिए बंद हो जाता है और अपने "दिखाई रिक्ति पर कोई प्रभाव नहीं के साथ" आवश्यकता, एक पर्ल एक लाइनर शायद would't का हिस्सा प्रतीत हो रहा है (मैं लेकिन यहां कोई शर्त लगाएगा कि एक लाइनर जो प्रदान करेगा)।

+3

यह ठीक है ** यदि ** आपके पास * विस्तार * उपयोगिता है जो यह करता है! मुझे लगता है कि आप यूनिक्स दुनिया में हैं: विंडोज़ * expand.exe * में कुछ अलग है। – AAT

6

Text::Tabs का उपयोग करें। निम्नलिखित दस्तावेज़ से बहुत थोड़ा ही अनुकूलित है:

perl -MText::Tabs -n -i.orig -e 'print expand $_' * 
+0

धन्यवाद! मैंने फ़ाइल को यूनिक्स लाइन एंडिंग में सामान्य करने के लिए इसे अनुकूलित करने और पिछली सफेद जगह को खत्म करने के लिए अनुकूलित किया: 'perl -MText :: टैब -ni -e's/\ s * $ //; s/\ s * \ r/\ एन/जी; प्रिंट $ _, "\ n" ''का विस्तार करें –

0

आप s/// उपयोग कर सकते हैं इस लक्ष्य को हासिल करने के लिए।

$line =~ s/\t/ /g; 

यह चार रिक्त स्थान के साथ प्रत्येक टैब (\t) की जगह चाहिए: शायद आप $ लाइन में संग्रहीत टेक्स्ट की पंक्ति में है। यह सिर्फ इस पर निर्भर करता है कि आपकी फ़ाइल में एक टैब कितनी रिक्त स्थान है।

यहां कुछ ऐसा है जो इसे आपके लिए बहुत जल्दी करना चाहिए; इसे संपादित करें कि आप कैसे करेंगे।

open(FH, 'tabz.txt'); 

my @new; 

foreach my $line (<FH>) { 
    $line =~ s/\t/ /g; # Add your spaces here! 
    push(@new, $line); 
} 

close(FH); 

open(FH, '>new.txt'); 
printf(FH $_) foreach (@new); 
close(FH); 
संबंधित मुद्दे