क्या विंडोज या यूनिक्स लाइन समाप्ति के साथ फ़ाइलों को जल्दी से पहचानने का एक तरीका है?


8

मुझे पता है कि हम विंडोज और यूनिक्स लाइन समाप्ति के बीच परिवर्तित करने के लिए dos2unix का उपयोग कर सकते हैं । मुझे आश्चर्य है कि क्या कोई कमांड है जो मुझे बता सकती है कि क्या किसी फ़ाइल में विंडोज या यूनिक्स लाइन समाप्ति है?

जवाबों:


11
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text

यदि आपको फ़ाइल में प्रत्येक पंक्ति की जांच करना आवश्यक लगता है, तो आप ऐसा कर सकते हैं:

$ grep -c "^M" f1 f2
f1:0
f2:3

$ wc -l f1 f2
 3 f1
 3 f2
 6 total

"^ M" को Ctrl + V Ctrl + M का उपयोग करके दर्ज किया गया था और यह ASCII कैरिज-रिटर्न (CR) वर्ण है।

यहां हम देखते हैं कि फ़ाइल f1 में तीन लाइनें हैं लेकिन कोई भी CR नहीं है इसलिए सभी लाइन एंडिंग यूनिक्स स्टाइल सोलो LFs होनी चाहिए।

फ़ाइल f2 में समान संख्या में लाइनें और CR हैं इसलिए यह अनुमान लगाना उचित है कि यह CRD, LF लाइन-एंडिंग्स का उपयोग करता है जैसा कि MSDOS और Windows द्वारा उपयोग किया जाता है।


1
fileआउटपुट लाइन समाप्त होने की स्थिति नहीं है, अगर वह ASCII से अधिक करीबी मैच पा सकता है, अर्थात setup.py: a python script text executable। उस व्यवहार को बदलने के लिए ध्वज खोजने के लिए प्रतीत नहीं हो सकता।
चमत्कार 2

1
@ चमत्कार 2k: शायद ऐसा करने के लिए एक कस्टम मैजिकफाइल बनाया जा सकता है। file -m magicfile f1 f2 f3
RedGrittyBrick

1

विंडोज पर, बताने का एक त्वरित तरीका नोटपैड में अपनी फ़ाइल को खोलना है। नोटपैड केवल विंडो शैली समाप्ति (CR + LF) पर लाइन-ब्रेक दिखाएगा, न कि यूनिक्स समाप्ति (LF)। तो आपका यूनिक्स टेक्स्ट इस तरह दिखेगा:

Line1Line2Line3Line4

जबकि, विंडोज़ टेक्स्ट इस तरह दिखेगा:

line1
line2
line3
line4

मैं यूनिक्स / लिनक्स प्लेटफ़ॉर्म से बहुत परिचित नहीं हूं, लेकिन मुझे यकीन है कि आप इसी तरह के हैक का उपयोग गैडिट या ईमैक्स जैसे कार्यक्रमों के साथ कर सकते हैं।


0
c=($(perl -0777ne 'print $_ =~ tr/\n//; print " "; 
                   print $_ =~ tr/\r//;'))
if   ((!(c[0] +   c[1]))) ;then echo no line endings  
elif ((  c[0] && !c[1] )) ;then echo LF
elif (( !c[0] &&  c[1] )) ;then echo CR 
elif ((  c[0] ==  c[1] )) ;then echo CRLF 
else echo "anbigious LF ${c[0]} CR ${c[1]}"
fi

ध्यान दें, कि गति के लिए, केवल व्यक्तिगत \rएस और \nएस को गिना जाता है, लेकिन यह एक बहुत ही अजीब फ़ाइल होगी जिसमें दोनों प्रकार की समान संख्या थी और अभी तक एक विंडोज सीआरएलएफ फ़ाइल नहीं थी ...

यह भी ध्यान दें कि * निक्स टूल fileफ़ाइल का पूरा स्कैन नहीं करता है, जबकि यह perlस्क्रिप्ट करता है। आपने उल्लेख नहीं किया है कि आप किस प्लेटफॉर्म पर चलना चाहते हैं; मैंने bashपर्ल के आउटपुट का परीक्षण करने के लिए स्क्रिप्ट का उपयोग किया है , लेकिन इसे विंडो cmdस्क्रिप्ट में बदला जा सकता है ।

आप बस अपनी फ़ाइल को इसमें डाल सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.