كيفية تحديد نهاية السطر للملف
-
02-07-2019 - |
سؤال
لدي مجموعة (مئات) من الملفات التي من المفترض أن تحتوي على نهايات سطر Unix.أظن بشدة أن بعضها لديه نهايات أسطر Windows، وأريد أن أعرف برمجيًا أي منها لديه نهايات.
أعلم أنه يمكنني الركض فقط
flip -uأو شيء مشابه في برنامج نصي لتحويل كل شيء، ولكن أريد أن أكون قادرًا على تحديد تلك الملفات التي تحتاج إلى التغيير أولاً.
المحلول
يمكنك استخدام grep
egrep -l $'\r'\$ *
نصائح أخرى
يمكنك استخدام ال file
الأداة التي ستخبرك بنوع نهاية السطر.أو يمكنك فقط استخدام dos2unix -U
والذي سيحول كل شيء إلى نهايات أسطر Unix، بغض النظر عما بدأ به.
شيء على غرار:
perl -p -e 's[\r\n][WIN\n]; s[(?<!WIN)\n][UNIX\n]; s[\r][MAC\n];' FILENAME
على الرغم من أن بعض هذا التعبير العادي قد يحتاج إلى تحسين وترتيب.
سيؤدي ذلك إلى إخراج ملفك باستخدام WIN أو MAC أو UNIX في نهاية كل سطر.جيد إذا كان الملف الخاص بك عبارة عن فوضى مروعة (أو فرق) وله نهايات مختلطة.
إليك الإجابة الأكثر أمانًا.إجابة Stimms لا تأخذ في الاعتبار الدلائل الفرعية والملفات الثنائية
find . -type f -exec file {} \; | grep "CRLF" | awk -F ':' '{ print $1 }'
- يستخدم
file
للعثور على نوع الملف.أولئك الذين لديهم CRLF لديهم أحرف إرجاع windows.إخراجfile
يتم تحديده بواسطة أ:
, والحقل الأول هو مسار الملف.
يستخدم Unix بايت واحد، 0x0A (LineFeed)، بينما يستخدم Windows وحدتي بايت، 0x0D 0x0A (Carriage Return، Line Feed).
إذا لم ترَ 0x0D مطلقًا، فمن المحتمل جدًا أن يكون Unix.إذا رأيت أزواج 0x0D 0x0A فمن المحتمل جدًا أن يكون MSDOS.
يستخدم Windows char 13 و 10 لإنهاء السطر، ويونكس واحد منهم فقط (لا أتذكر أي منهما).لذا يمكنك استبدال char 13 و 10 بالحرف 13 أو 10 (الذي يستخدم يونكس).
عندما تعرف الملفات التي لها نهايات أسطر Windows (0x0D 0x0A
أو \r \n
)، ماذا ستفعل بهذه الملفات؟أفترض أنك ستحولها إلى نهايات سطر Unix (0x0A
أو \n
).يمكنك تحويل الملف بنهايات سطر Windows إلى نهايات سطر Unix باستخدام sed
الأداة المساعدة، فقط استخدم الأمر:
$> sed -i 's/\r//' my_file_with_win_line_endings.txt
يمكنك وضعه في البرنامج النصي مثل هذا:
#!/bin/bash
function travers()
{
for file in $(ls); do
if [ -f "${file}" ]; then
sed -i 's/\r//' "${file}"
elif [ -d "${file}" ]; then
cd "${file}"
travers
cd ..
fi
done
}
travers
إذا قمت بتشغيله من الدليل الجذر الخاص بك مع الملفات، فستتأكد في النهاية من أن جميع الملفات ذات نهايات سطر Unix.