2012-10-12 22 views
5

को छोड़कर यह प्रश्न another question about selectively appending lines from one file to another पर जारी है।विंडोज कमांड लाइन/खोल - यूटीएफ -8 बीओएम

मैं जिस रेगेक्स का उपयोग कर रहा हूं वह रखने/हटाने के लिए लाइनों से मेल खाने के लिए ठीक है। समस्या यह है कि फ़ाइल को अन्य फ़ाइलों के समूह से बनाया गया था, और कभी-कभी जिस लाइन को मैं यूटीएफ -8 एन्कोडेड फ़ाइल की पहली पंक्ति के रूप में शुरू करना चाहता हूं। इसका मतलब है कि findstr आदेश रिटर्न कुछ की तरह:

LineToKeep that started out as the first line in its file 
LineToKeep another 
LineToKeep more lines 
LineToKeep that started out as the first line in its file 
LineToKeep more 

यह गारंटी है कि बीओएम बाइट्स को छोड़कर, लाइन हमेशा "LineToKeep" के साथ शुरू हो जाएगा। मैं उन तीन यूटीएफ -8 बीओएम बाइट्स से कैसे छुटकारा पा सकता हूं, क्योंकि ये विंडोज़ खोल कमांड उन्हें सही तरीके से संभाल नहीं सकते हैं?

मैं उन जगहों को हटाने के लिए एक तरीका की उम्मीद कर रहा हूं, या शायद पिछले प्रश्न से findstr कमांड में एक संशोधन की उम्मीद कर रहा हूं।

चूंकि मुझे पता है कि प्रत्येक पंक्ति "लाइन टॉकीप" या "∩╗┐LineToKeep" से शुरू होनी चाहिए, मुझे लगता है कि प्रत्येक पंक्ति के लिए if (Line[3:10] == "LineToKeep") { Line = Line[3:]; } जैसी कुछ गणना करने का एक तरीका है।

+1

.. और यही कारण है कि पर्ल को प्रत्येक ओएस के साथ भेजना चाहिए ;-) –

+0

क्या आपने वेनिला कमांड दुभाषिया के बजाय पावरहेल का उपयोग करने के बारे में सोचा है? ऐसा कुछ करना तुच्छ होगा। विंडोज शैल यूनिकोड को ज्यादा पसंद नहीं करता है। – kprobst

+0

मैं विजुअल स्टूडियो के प्री/पोस्ट-बिल्ड इवेंट्स में स्क्रिप्ट चलाने जा रहा हूं। Http://stackoverflow.com/questions/6500320/post-build-event-execute-powershell के अनुसार, PowerShell स्क्रिप्ट चलाने का विकल्प हो सकता है। हालांकि यह बाहरी समाधान की तरह महसूस करेगा। – Kache

उत्तर

1

मैं cmd ​​खिड़कियों में PowerShell बुला समाप्त हो गया:

powershell . "Get-ChildItem . | Select-String '^LineToKeep' | foreach {$_.Line}" 
1

उस फ़ाइल में बीओएम को हटा unix world से एक अन्य विकल्प यथा-स्थान:

sed -zbi "1s/^\xEF\xBB\xBF//" filepath 

यह https://github.com/mbuilov/sed-windows से एसईडी 4.4 for windows डाउनलोड करने के लिए की आवश्यकता है जो -z and -b options काम करने की पेशकश करता है जो corruption of line endings को रोकता है।

संबंधित मुद्दे