سؤال

إذا فعلت

$ ls -l --color=always

أحصل على قائمة بالملفات داخل الدليل مع بعض الألوان الجميلة لأنواع الملفات المختلفة وما إلى ذلك.

الآن، أريد أن أكون قادرًا على توصيل الإخراج الملون لـ ls خلال grep لتصفية بعض الملفات التي لا أحتاج إليها.المفتاح هو أنني ما زلت أرغب في الحفاظ على اللون بعد مرشح grep.

$ ls -l --color=always | grep -E some_regex

^ أفقد اللون بعد grep

يحرر:أنا أستخدم خادم بدون رأس Ubuntu 8.10، وBash 3.2.39، وهو تثبيت مخزون إلى حد كبير بدون أي تكوينات رائعة

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

المحلول

من المحتمل أن يتم إزالة grep الخاص بك lsرموز الألوان الخاصة به لأنه تم تشغيل التلوين الخاص به.

أنت "تستطيع" أن تفعل هذا:

ls -l --color=always | grep --color=never pattern

ومع ذلك، فمن المهم جدًا أن تفهم ما أنت عليه بالضبط grepبينغ هنا.ليس فقط grepبينغ ls غير ضروري (استخدم أ glob بدلاً من ذلك)، هذه الحالة بالذات هي grepلا يقتصر الأمر على تنفيذ الأمر ping من خلال أسماء الملفات وإحصائيات الملفات فحسب، بل أيضًا من خلال رموز الألوان التي أضافتها ls!

الجواب الحقيقي لسؤالك هو:لا grep هو - هي.ليست هناك حاجة للأنابيب أبدًا ls في أي شيء أو التقاط مخرجاته. ls مخصص فقط للتفسير البشري (على سبيل المثال.ل ينظر في في تفاعلية Shell فقط، ولهذا الغرض فهو مفيد للغاية بالطبع).كما ذكرنا من قبل، يمكنك تصفية الملفات ls تعداد باستخدام الكرات:

ls -l *.txt      # Show all files with filenames ending with `.txt'.
ls -l !(foo).txt # Show all files with filenames that end on `.txt' but aren't `foo.txt'. (This requires `shopt -s extglob` to be on, you can put it in ~/.bashrc)

أنا للغاية أنصحك بقراءة هاتين الوثيقتين الممتازتين حول هذا الموضوع:

نصائح أخرى

ويجب عليك معرفة ما اذا كنت حقا باستخدام ليرة سورية "الحقيقي"، فقط عن طريق الاتصال مباشرة ثنائي:

/bin/ls ....

ولأن: إن الشفرة التي وصفها حقا يجب أن تعمل، إلا ليرة سورية يتجاهل في اللون = دائما لسبب غريب أو علة

وأظن بعض الاسم المستعار أو الدالة التي تضيف (مباشرة أو من خلال متغير) بعض الخيارات. انقر نقرا مزدوجا التحقق من أن هذا ليس هو الحال.

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