سؤال

أحاول تشغيل الأمر لاستخراج نطاق من التواريخ من ملف وطباعتها

السابق: sed -ne '/^2009-08-20/,/^2009-08-26/p'

ومع ذلك، لدي تكرارات متعددة لتاريخ 26-08-2009 في الملف، وأريد إعادتهم جميعًا، ومع ذلك فهو يُرجع الأول فقط.هل من الممكن أن يكون كل العودة؟

شكرًا!

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

المحلول

sed -ne '/^2009-08-20/,/^2009-08-26/b e;/^2009-08-26/b e;d;:e p'

لشرح:"e" هي تسمية وإذا كنت في النطاق فإنك تتفرع إلى تلك التسمية.أنت تعطي فرصة ثانية وتتحقق مما إذا كانت هذه هي نهاية النطاق.إذا لم يكن الأمر كذلك، احذف السطر.

نصائح أخرى

السبب وراء إرجاع المطابقة الأولى فقط لتاريخ الانتهاء هو أن النطاق يتراوح من المطابقة الأولى للنمط الأول إلى المطابقة الأولى للنمط الثاني (ضمنًا) وسيتوقف بعد ذلك عن الطباعة حتى يحدث النمط الأول مرة أخرى.إذا لم يكن لديك مشكلة في كتابة النمط الثاني ثلاث مرات، يمكنك استخدامه

sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'

والذي سيطبع سطرًا إذا كان بين تاريخ البدء (شاملاً) وتاريخ الانتهاء (حصريًا) - هذا ما!يفعل) أو إذا كان يبدأ بتاريخ الانتهاء.

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