سؤال

إذا قمت بفتح الملفات التي قمت بإنشائها في Windows، فإن جميع الأسطر تنتهي بـ ^M.
كيف يمكنني حذف هذه الأحرف كلها مرة واحدة؟

هل كانت مفيدة؟

المحلول

dos2unix هي أداة مساعدة لسطر الأوامر يمكنها القيام بذلك، أو :%s/^M//g سوف إذا كنت تستخدم كنترول-الخامس كنترول-م لإدخال ^M، أو يمكنك ذلك :set ff=unix وسوف يقوم vim بذلك نيابةً عنك.

المستندات الموجودة في إعداد "تنسيق الملف" هي هنا, ، ويحتوي موقع vim wiki على ملف شامل صفحة على السطر تنتهي التحويلات.

وبدلاً من ذلك، إذا قمت بنقل الملفات ذهابًا وإيابًا كثيرًا، فقد لا ترغب في تحويلها، بل تريد القيام بذلك :set ff=dos, ، لذلك سيعرف vim أنه ملف DOS وسيستخدم اصطلاحات DOS لنهايات الأسطر.

نصائح أخرى

تغيير نهايات الأسطر في العرض:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

يمكن أيضًا استخدام هذا كعملية حفظ (:w وحده لن يحفظ باستخدام نهايات الأسطر التي تراها على الشاشة):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

ويمكنك استخدامه من سطر الأوامر:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done

أنا عادة استخدم

:%s/\r/\r/g

والذي يبدو غريبًا بعض الشيء، ولكنه يعمل بسبب الطريقة التي يتطابق بها vim مع خلاصات الأسطر.أجد أيضًا أنه من الأسهل أن أتذكر :)

أفضّل استخدام الأمر التالي:

:set fileformat=unix

تستطيع ايضا استخذام mac أو dos لتحويل ملفك على التوالي إلى اتفاقية ملف Macintosh أو MS-DOS/MS-Windows.ولا يفعل شيئًا إذا كان الملف بالتنسيق الصحيح بالفعل.

لمزيد من المعلومات، راجع مساعدة vim:

:help fileformat
:%s/\r+//g

في Vim، يؤدي ذلك إلى تجريد كل أحرف الإرجاع، ويترك الأسطر الجديدة فقط.

:set fileformat=unix للتحويل من دوس إلى يونيكس.

dos2unix يمكن تعديل محتويات الملف مباشرة.

يمكنك استخدامه مباشرة على الملف، دون الحاجة إلى إعادة توجيه الملف بشكل مؤقت.

dos2unix input.txt input.txt

ما ورد أعلاه يستخدم لوحة المفاتيح الأمريكية المفترضة.استخدم ال -437 خيار لاستخدام لوحة المفاتيح البريطانية.

dos2unix -437 input.txt input.txt

تحويل دليل الملفات من دوس إلى يونكس

باستخدام سطر الأوامر وsed، ابحث عن جميع الملفات الموجودة في الدليل الحالي بالملحق ".ext" وقم بإزالة كافة "^M"

@ https://Gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

أيضاً، كما ذكرنا أعلاه ^ م = السيطرة+V + السيطرة + م (لا تكتب فقط رمز علامة الإقحام "^" وM)

tr -d '\15\32' < winfile.txt > unixfile.txt

(يرى: http://kb.iu.edu/data/acux.html)

يمكن للخطوات التالية تحويل تنسيق الملف من dos إلى unix:

:e ++ff=dos  Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix    This buffer will use LF-only line endings when written.[A 2]
:w   Write buffer using unix (LF-only) line endings.

مرجع: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

مع الأمر التالي:

:%s/^M$//g 

احصل على ال ^M ليظهر النوع كنترولالخامس ثم كنترولم. كنترولالخامس يخبر Vim أن يأخذ الحرف التالي الذي تم إدخاله حرفيًا.

لقد وجدت طريقة سهلة للغاية:افتح الملف بالنانو: nano file.txt

يضعط كنترول+يا للحفظ، ولكن قبل الضغط يدخل, ، يضعط: بديل+د للتبديل بين نهايات أسطر DOS وUnix/Linux، أو: بديل+م للتبديل بين نهايات أسطر Mac وUnix/Linux ثم اضغط يدخل لحفظ و كنترول+X ليستقيل.

:g/Ctrl-v Ctrl-m/s///

كنترولم هي الشخصية \r, ، أو حرف العودة، الذي تضيفه نهايات أسطر DOS. كنترولالخامس يخبر vim بإدراج حرفي كنترولم الحرف في سطر الأوامر.

إذا أخذنا هذا الأمر ككل، فإنه يحل محل الكل \r بدون أي شيء، وإزالتها من أطراف السطور.

يمكنك استخدام:

vim somefile.txt +"%s/\r/\r/g" +wq

أو dos2unix utility .

التعليق حول ظهور ^M هو ما نجح بالنسبة لي.مجرد كتابة "^M" في جهازي السادس لم تحصل على شيء (غير موجود).ال كنترول+الخامس كنترول+م التسلسل فعل ذلك بشكل مثالي بالرغم من ذلك.

كان أمر استبدال العمل الخاص بي

:%s/Ctrl-V Ctrl-M/\r/g

وبدا الأمر هكذا على شاشتي:

:%s/^M/\r/g

يمكنك استخدام الأمر التالي:
:%s/^V^M//g
حيث يعني "^" الاستخدام كنترول مفتاح.

يتم استخدام الأمر أدناه لإعادة تنسيق جميع ملفات .sh في الدليل الحالي، وقد قمت باختباره على نظام التشغيل Fedora الخاص بي.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

عادة ما يكون هناك dos2unix يمكنك استخدام الأمر لهذا، فقط تأكد من قراءة الدليل لأن إصدارات GNU وBSD تختلف في كيفية تعاملها مع الوسائط.

نسخة بي إس دي:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

نسخة جنو:

dos2unix $FILENAME

بدلا من ذلك، يمكنك إنشاء بنفسك dos2unix مع أي من الإجابات المقترحة هنا، على سبيل المثال:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}

كنت أعلم أنني رأيت هذا في مكان ما.إليك نصيحة تسجيل الدخول إلى FreeBSD:

هل تحتاج إلى إزالة كافة أحرف ^M من ملف DOS؟يحاول

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

في vim، اكتب:

:w !dos2unix %

سيؤدي هذا إلى توجيه محتويات المخزن المؤقت الحالي إلى أمر dos2unix وكتابة النتائج فوق المحتويات الحالية.سيطلب Vim إعادة تحميل الملف بعد ذلك

للتشغيل مباشرة في وحدة تحكم Linux:vim file.txt +"set ff=unix" +wq

على الرغم من أن هذا الموضوع قديم جدًا، إلا أنني أود أن أضيف أشياء أخرى من wikia:

%s/\r\+$//g

ابحث عن كل علامات إرجاع النقل (ممثل واحد وأكثر) حتى نهاية السطر واحذفها \n سيبقى في EOL.

هذه طريقتي.لقد فتحت ملفًا في dos EOL وعندما أحفظ الملف سيتم تحويله تلقائيًا إلى Unix EOL

autocmd BufWrite * :set ff=unix

إذا قمت بإنشاء ملف في NotePad أو NotePad ++ في Windows وإحضاره إلى Linux وفتحه بواسطة vim، فسترى ^M في نهاية كل سطر.لإزالة هذا،

في محطة Linux الخاصة بك، اكتب

dos2unix filename.ext

وهذا سوف يفعل السحر المطلوب.

أردت أسطرًا جديدة بدلاً من ^M's.بيرل للإنقاذ:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

أو للكتابة إلى stdout:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top