سؤال

أنا أعمل على جهاز ماك، مع بعض الملفات القديمة إلى حد ما.تم إنشاء ملفات مختلفة بواسطة برامج مختلفة، لذلك ينتهي بعضها بـ (نظام التشغيل Mac) والبعض الآخر بـ (نظام التشغيل Unix).أريد أن أكون قادرًا على تشغيل أوامر مثل diff وgrep وما إلى ذلك على هذه الملفات، ولكن يتم التعامل مع الملفات التي تحتوي على كخط واحد عملاق.هل يعرف أحد إصدارًا من diff وgrep وما إلى ذلك سيعمل بشكل صحيح مع جميع الأسطر الجديدة؟

الوقت المتوقع للوصول:أود أيضًا أن تكون أدوات مساعدة لنظام التشغيل Unix حتى أتمكن من استخدامها في البرامج النصية وemacs وما إلى ذلك...

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

المحلول

كما قال جاي، يبدو أن Diff'nPatch هو ما تبحث عنه.بدلاً من ذلك، يمكنك تحويل جميع نهايات الأسطر ' ' في ' ' في أمر واحد مثل هذا:

sed -ie 's/\r/\n/' filename

أو

find . | xargs -n1 sed -ie 's/\r/\n/'

(قد ترغب في تصفية قائمة الملفات بطريقة ما في الحالة الأخيرة أو سيتم تطبيقها على جميع الملفات في جميع الدلائل الفرعية.)

نصائح أخرى

إذا كنت تستخدم فرق ث فإنه سيتم تجاهل المسافة البيضاء في الملفات، والتي ربما تكون كافية لاحتياجاتك.

يحرر:أدركت للتو أنني أخطأت في قراءة المنشور في المرة الأولى وأنك تبحث بالفعل عن فرق يناسبك \r نهايات الخط.سيكون اقتراحي هو تحويل الملفات بشيء من هذا القبيل يواجه التي يمكنها تحويل الملفات إلى ملف \n شكل موحد.

تحرير 2:لقد وجدت للتو شيئًا يشبه ما تريد - ديفنباتش:

Diff'npatch هو منفذ إلى Macintosh من GNU "Diff" و "Patch" و "CMP".يتيح لك مقارنة وإيجاد الاختلافات بين ملفين أو مجلدتين ، وتجميع ملفين ، وإنشاء فرق في تنسيقات مختلفة (عادية ، سياق ، UNIDIFF ، إلخ) ، تطبيق التصحيحات ، مقارنة الملفات بايت.يمكنه التعامل مع أي نوع من نهايات الخط (Mac أو Unix أو Windows)

تحتوي الأداة المساعدة للفرق المرفقة مع OSX Lion على خيار "strip-trailing-cr" الذي يفعل ما تريد.يمكنك استخدامه مثل هذا:

diff -cpt a.c b.c --strip-trailing-cr

قد يكون الأمر dos2unix مفيدًا في تحويل ملفاتك إلى تنسيق ثابت أولاً.أعتقد أنه متاح لكل منصة تقريبًا يمكنك التفكير فيها ويمكن تشغيله على الكثير من الملفات في وقت واحد.أعتقد أن هناك حزمة متاحة لنظام التشغيل Mac.

عرض الفرق الخاص بـ PHPStorm "تجاهل المسافة البيضاء" يعمل فقط.يتجاهل تلقائيًا الاختلافات في أحرف الإرجاع / EOL / السطر الجديد / ماذا لديك.يمكنك أن تضيع وقتك في العبث بأوامر Unix الغامضة أو أي شيء آخر، أو يمكنك فقط الحصول على شيء يعمل بالفعل والمضي قدمًا في الحياة.

  • فشل استخدام أي من الحلول المذكورة أعلاه في Mountain Lion (بما في ذلك الحل الذي تم وضع علامة عليه كإجابة صحيحة).فشلت جميع روابط تنزيل "Diff-npatch".(لقد وجدت http://webperso.easyconnect.fr/bdesgraupes/tools.html لكنني لا أحب حقًا فكرة الاضطرار إلى اللجوء إلى استخدام أداة فرق لا يمكن استدعاؤها من سطر الأوامر وبالتالي دمجها مع أي أداة IDE أو VCS قد أستخدمها، مثل BBEdit أو SourceTree أو SmartSVN - جميعها منها، راجع للشغل، فشلت في تجاهل الأسطر الجديدة باستخدام أداة الفرق المضمنة الخاصة بهم.

نعم، خطوطي الجديدة هي ، ولكن ماذا في ذلك؟أررر!إذا كان البرنامج غبيًا جدًا لدرجة أنه لم يتمكن من إدراك ذلك == فسأستخدم برنامجًا مختلفًا يكون ذكي بما فيه الكفاية.

كان PHPStorm هو البرنامج الوحيد الذي يحتوي على أداة فرق "تعمل للتو" - وهو ما أتوقع أن تفعله برامج Mac.أتوقع أن يقوم برنامج Mac بذلك مجرد العمل.أستخدم جهاز Mac حتى أتمكن من القيام بعملي بدلاً من تعلم الأوامر الطرفية الغامضة عند كل منعطف، والتي تكون جميعها تقريبًا سيئة التوثيق، وأتوقع منك أن تفهم فقط كيف من المفترض أن يتم تنسيق الأوامر دون أي أمثلة واضحة، لذلك لا تعرف أبدًا ما إذا كانت أنت تفعل ذلك بشكل خاطئ أو إذا كان الأمر ببساطة لا يعمل تمامًا مثل جميع البرامج السيئة الأخرى.خذ هذا المثال من "man diff":

   -I RE  --ignore-matching-lines=RE
          Ignore changes whose lines all match RE.

حسنًا، بعد أن قرأت هذا، ليس لدي أي فكرة عما يعنيه.لا يوجد مثال على استخدامه.ما هو "إعادة"؟لا يقول في أي مكان.

ثم هناك هذه الجوهرة:

  --GTYPE-group-format=GFMT
          Similar, but format GTYPE input groups with GFMT.

   --line-format=LFMT
          Similar, but format all input lines with LFMT.

   --LTYPE-line-format=LFMT
          Similar, but format LTYPE input lines with LFMT.

   LTYPE is `old', `new', or `unchanged'.
          GTYPE is LTYPE or `changed'.

          GFMT may contain:

   %<     lines from FILE1

   %>     lines from FILE2

   %=     lines common to FILE1 and FILE2

   %[-][WIDTH][.[PREC]]{doxX}LETTER
          printf-style spec for LETTER

          LETTERs are as follows for new group, lower case for old group:

   F      first line number

   L      last line number

   N      number of lines = L-F+1

   E      F-1

   M      L+1

          LFMT may contain:

   %L     contents of line

   %l     contents of line, excluding any trailing newline

   %[-][WIDTH][.[PREC]]{doxX}n
          printf-style spec for input line number

          Either GFMT or LFMT may contain:

   %%     %

   %c'C'  the single character C

   %c'\OOO'
          the character with octal code OOO

لم أستطع أن أفهم أي معنى لهذا المقطع.ما هو "الإدخال"؟هل هو كلا الملفين أم الملف "إلى" فقط أم الملف "من" فقط؟إلى ماذا تشير كلمة "مشابه"؟ماذا تعني كلمة "is" في الجملة، "GFMT 'هو' LTYPE أو "تم تغييره""؟هل يعني "يمكن استبداله"؟إذا كان الأمر كذلك، فلماذا لا يتم وضع كلمة "GFMT" بين علامتي الاقتباس أو بين قوسين وما إلى ذلك؟وبما أنه لم يتم تقديم مثال، فلا توجد طريقة لمعرفة ذلك؛صياغة الوثائق غامضة تماما.ماذا تحتوي عبارة "GFMT" على...يقصد؟هل تعني كلمة "يحتوي على" أن النص الذي يحل محل الاختصار GFMT قد يحتوي على ذلك؟بدون مثال واضح فهو عديم الفائدة تمامًا.

لماذا تهتم بكتابة صفحة دليل إذا كنت تريد أن تجعلها مبهمة وغامضة للغاية بحيث لا فائدة منها لأي شخص لا يعرف بالفعل كيفية استخدام البرنامج، بشكل أساسي؟عند هذه النقطة، ليس دليلا.إنها مجرد صفحة مرجعية سريعة للأشخاص الذين كتبوا البرنامج حتى يتمكنوا من تذكر كيفية استخدامه.أعتقد أنهم يفترضون أنك ستقرأ فقط الكود المصدري نفسه إذا كنت تريد معرفة ما يفعله بالفعل.

وقتي ثمين.أفضّل أن أدفع المال فقط للحصول على برنامج يعمل بشكل صحيح ويمتلك الوثائق المناسبة.

لأن كل هذه فشلت:

 diff -d --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

...فشل في تجاهل الأحرف .

 diff -wd --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

...فشل في تجاهل الأحرف .

 diff -wd --suppress-common-lines --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

...فشل في تجاهل الأحرف .

 diff -wd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space

...فشل في تجاهل الأحرف .

 diff -awd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space

...فشل في تجاهل الأحرف .

وفي هذا الصدد، إذا كانت هذه الأحرف أحرفًا، فقد فشل ذلك أيضًا عند إضافة الأحرف .

حيث test.phtml ==

foo

حاجِز

وrest.html ==

com.foobar

يمنحك الأمر "diff" دائمًا شيئًا مثل:


* 1,2 ** !فو!bar \ لا يوجد سطر جديد في نهاية الملف

--- 1 ---- !foobar \ لا يوجد سطر جديد في نهاية الملف

...يفشل!

لقد استخدمت الإصلاح السريع التالي، والذي له عيوب (انظر أدناه):

1:قم بإجراء فرق وقم بإدراج أسماء الملفات فقط

diff -r -q dir1/ dir2/

2:افتح كل ملف مدرج واحفظه باستخدام المحرر الذي تم استخدامه، سيؤدي هذا إلى تغيير نهايات الأسطر.

3:قم بعمل فرق منتظم

تشمل العيوب ما يلي:

  • أقل قوة، وعرضة للخطأ
  • مزيد من العمل إذا كان لديك الكثير من الملفات

لقد نجح هذا بالنسبة لي:

diff -r --ignore-all-space dir1/ dir2/

أنا على OSX، ولدي ملفات مختلطة من OSX وWindows.ائتمان: http://www.codealpha.net/514/diff-and-ignoring-spaces-and-end-of-lines-unix-dos-eol/

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