سؤال
لدي ملف تم إنشاؤه من Windows التي يجب علي لصقها في برنامج نصي تحت Linux. يعمل نصيتي بشكل جيد ، باستثناء حقيقة أنه في نهاية كل سطر حصلت على ^M char.
كيف يمكنني إزالته مع باش؟
حاليا السيناريو الخاص بي هو:
#/bin/bash
IFS=$'\n'
for CUSTOMER in `cat exp.csv`
do
echo $CUSTOMER
done
المحلول
يتصل DOS2UNIX تشغيل exp.csv
قبل مزيد من المعالجة.
نصائح أخرى
^m يجب أن يكون Windows Newline r ، وبالتالي تحتاج فقط إلى إزالة كل r يمكنك تحقيق ذلك باستخدام أداة tr ، والتي يمكنك الاتصال بها من البرنامج النصي bash الخاص بك ، وهذا من مقالة ويكيبيديا (لم أتحقق منها):
tr -d '\r' < inputfile > outputfile
لذلك ، من باش يجب أن يكون مثل
VAR=`echo -n $CUSTOMER | tr -d '\r'`
أفعل هذا كثيرًا باستخدام tr
. شخصية CR هي 013 في أوكتال:
tr -d '\013' < $FILE
لذلك في حلقتك ، سيكون ذلك فقط
for CUSTOMER in `tr -d '\013' < exp.csv`
أمر dos2unix ont هو ملف
هناك عدة طرق لإزالة سيئة char M
من ملفك
- استخدم الأمر
dos2unix file_name
- افتح الملف في محرر VI ، انتقل إلى وضع الأوامر واكتب
:%s/ctrl+v ctrl+m//g
سيؤدي ذلك إلى إزالة جميع المشاريع السيئة منك. استخدم الآن:wq
للحفظ والخروج sed -e "s/^M//" filename(exist file name) > newfilename(new name)
SED -e "S/^M //" اسم الملف (اسم ملف موجود)> NewFilename (اسم جديد)
ملاحظة: للعثور على chars السيئة على خادم Unix Hit أدناه لجميع ملفات Java
find . -name "*.java*" -type f | xargs grep -l ^M *
وبالمثل يمكنك استخدام "*.*"
بدلاً من "*.java"
لجميع أنواع الملفات