سؤال

لدي ملف تم إنشاؤه من 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 من ملفك

  1. استخدم الأمر dos2unix file_name
  2. افتح الملف في محرر VI ، انتقل إلى وضع الأوامر واكتب :%s/ctrl+v ctrl+m//g سيؤدي ذلك إلى إزالة جميع المشاريع السيئة منك. استخدم الآن :wq للحفظ والخروج
  3. 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" لجميع أنواع الملفات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top