2012-02-10 16 views
16

साथ पाठ फ़ाइल से खाली लाइनों को हटाने मुझे पता है कि मैं का उपयोग कर सकते हैं:PowerShell

gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt 

खाली लाइनों को हटाने के लिए। लेकिन मैं उन्हें 'जगह' के साथ कैसे हटा सकता हूं?

+3

आप क्यों प्रतिस्थापित करना चाहते हैं? और आपकी स्वीकृति दर पर काम करें – manojlds

+0

मेरा उत्तर '-replace' [तुलना ऑपरेटर] (http://technet.microsoft.com/en-us/library/dd315321.aspx) के साथ खाली लाइनों को हटा देता है। 'गेट-कंटेंट' में प्रतिस्थापन पैरामीटर नहीं है, इसलिए मुझे लगता है कि आप ऑपरेटर के साथ ऐसा करने का एक तरीका ढूंढ रहे हैं। –

उत्तर

1

आप प्रतिस्थापित नहीं कर सकते हैं, आपको कुछ के साथ कुछ बदलना है, और आपके पास दोनों नहीं हैं।

+0

Poowershell समर्थन है- emply लाइनों को हटाने के लिए "" हटाएं? – Suliman

+0

ऐसा नहीं लगता है कि इसे "-remove" का समर्थन नहीं है। – Suliman

+1

आप सेब और संतरे से बात कर रहे हैं। निकालें और बदलें स्पष्ट रूप से अलग हैं। आपके पास मूल रूप से काम करेगा, लेकिन शायद आप मौजूदा फ़ाइल को पुनर्निर्माण करने की कोशिश कर रहे हैं लेकिन रिक्त स्थान के बिना। पीएस सी: \> $ टेक्स्ट = get-content a.txt पीएस सी: \> $ टेक्स्ट | जहां {$ _} | आउट-फाइल a.txt –

0

यह खाली लाइनों या रेखाओं को केवल व्हाइटस्पेस वर्णों (टैब/रिक्त स्थान) के साथ हटा देगा।

[IO.File]::ReadAllText("FileWithEmptyLines.txt") -replace '\s+\r\n+', "`r`n" | Out-File "c:\FileWithNoEmptyLines.txt" 
5

इसके बजाय आप मैच का उपयोग कर सकते -eq अगर आप भी फ़ाइलों को केवल रिक्त स्थान वर्ण हो बाहर करना चाहते हैं:

@(gc c:\FileWithEmptyLines.txt) -match '\S' | out-file c:\FileWithNoEmptyLines 
34

मैं एक अच्छा एक लाइनर यहाँ >>http://www.pixelchef.net/remove-empty-lines-file-powershell पाया। बस नई रिक्त स्थानों के साथ-साथ केवल रिक्त स्थान, बस टैब और संयोजनों वाली रेखाओं सहित कई रिक्त स्थानों के साथ इसका परीक्षण किया।

(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt 

कोड के बारे में कुछ नोट्स के लिए मूल देखें। अच्छा :)

+1

मुझे लगता है कि बैलेंस पर मैं पसंद करता हूं '(gc file.txt) | ? {-नॉट $ _। IsNullOrWhiteSpace()} | सेट-कंटेंट file.txt' क्योंकि यह इरादे को अधिक स्पष्ट रूप से व्यक्त करता है, लेकिन यह एक ही चीज़ के बराबर है। –

+0

संक्षिप्त नज़र में, मुझे लगता है कि मेरे स्ट्रिंग्स पर "IsNullOrWhiteSpace()" विधि नहीं है ... और ... एक उदाहरण विधि कैसे शून्य के लिए जांच सकती है? पोस्ट उत्तर अच्छा काम करता है हालांकि! – xdhmoore

+0

IsNullOrWhiteSpace System.String ऑब्जेक्ट से एक स्थिर विधि है PowerShell में इसे कॉल करने का उचित तरीका निम्नानुसार है: '[स्ट्रिंग] :: IsNullOrWhiteSpace ({your string}) '। नील बार्नवेल टिप्पणी पर सही कमांड लाइन बेस निम्नानुसार है: '(gc file.txt) | ? {-नोट [स्ट्रिंग] :: IsNullOrWhiteSpace ($ _)} | सेट-कंटेंट file.txt' – LMA1980

0
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt; 
+0

पीएस: मुझे पता है कि यह दिन में पुराना तरीका है लेकिन कुछ और भी लाभ हो सकता है .. – Nonso

0

इस से file.txt

PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt 
0

विशेष रूप से -replace का उपयोग नहीं पिछली श्वेत रिक्ति और रिक्त लाइनों निकालता है, लेकिन आप -notmatch और regex का उपयोग कर सामग्री पार्स ही प्रभाव मिलता है।

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt 
6

रैंडी Skretka से कोड का यह टुकड़ा मेरे लिए ठीक काम कर रहा है, लेकिन मैं समस्या थी, कि मैं अभी भी फ़ाइल के अंत में एक नई पंक्ति थी।

(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt

तो मैं जोड़ा अंत में इस:

(जीसी $:

$content = [System.IO.File]::ReadAllText("file.txt") 
$content = $content.Trim() 
[System.IO.File]::WriteAllText("file.txt", $content) 
0

आप वास्तव में एक फ़ाइल से रिक्त लाइनों फ़िल्टर करना चाहते हैं तो आप इस कोशिश कर सकते हैं स्रोत_फाइल) .Trim() | ? {$ _। लंबाई-जीटी 0}