كيف يمكنك إدخال أنبوب من خلال البقرى إلى آخر الأداة المساعدة ؟

StackOverflow https://stackoverflow.com/questions/972370

  •  13-09-2019
  •  | 
  •  

سؤال

أنا باستخدام 'tail -f' لمتابعة ملف السجل كما انها تحديثه ؛ أنا القادم الأنابيب إخراج هذا البقرى فقط لاظهار الخطوط التي تحتوي على مصطلح البحث ("org.springframework" في هذه الحالة).أخيرا أود أن جعل الأنابيب الإخراج من البقرى إلى أمر ثالث, 'قطع':

tail -f logfile | grep org.springframework | cut -c 25-

الأمر قص إزالة 25 أول حرف من كل سطر بالنسبة لي إذا كان يمكن الحصول على مدخلات من grep! (يعمل كما هو متوقع إذا كنت القضاء على 'البقرى' من السلسلة.)

أنا باستخدام cygwin مع باش.

النتائج الفعلية:عندما أقوم بإضافة الثانية الأنابيب للاتصال 'قطع' الأمر ، والنتيجة هي أنه توقف ، كما لو كان في انتظار الإدخال (في حال كنت أتساءل).

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

المحلول

على نظامي، تم تخزين حوالي 8K قبل أن أحصل على أي إخراج. عمل هذا التسلسل لمتابعة الملف على الفور:

tail -f logfile | while read line ; do echo "$line"| grep 'org.springframework'|cut -c 25- ; done

نصائح أخرى

على افتراض جنو البقرى ، إضافة --line-buffered إلى سطر الأوامر الخاص بك, على سبيل المثال.

tail -f logfile | grep --line-buffered org.springframework | cut -c 25-

تحرير:

أرى البقرى التخزين المؤقت ليس المشكلة الوحيدة هنا ، كما قطع لا تسمح linewise التخزين المؤقت.

قد ترغب في محاولة استبدالها شيء يمكنك التحكم مثل sed:

tail -f logfile | sed -u -n -e '/org\.springframework/ s/\(.\{0,25\}\).*$/\1/p'

أو awk

tail -f logfile | awk '/org\.springframework/ {print substr($0, 0, 25);fflush("")}'

ما يجب أن تعمل بشكل جيد - هذه هي الفكرة بأكملها لخطوط الأنابيب. المشكلة الوحيدة التي أراها هي أنه في إصدار cut لدي (GNU COSEUTILE 6.10)، يجب عليك استخدام بناء الجملة cut -c 25- (أي استخدام علامة ناقص بدلا من علامة زائد) لإزالة أول 24 حرفا.

أنت أيضا تبحث عن أنماط مختلفة في الأمثلة الخاصة بك، في حالة صلة بها.

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