كيفية تعديل إخراج grep:الحصول على كل نتيجة في كل سطر
سؤال
أنا أستخدم grep للبحث في نمط من خلال ملف موجود في var
الكود هنا:
result=`grep "$pattern" $file`
echo $result
نتيجة:أ) بعض الكلمات ب) بعض الخطوط ج) بعض الأرقام
طباعة النتيجة على سطر واحد.أرغب في الحصول على نتائج واحدة للخط أ
يحب:
A) somewords
B) somelines
C) somenumbers
كيف يمكنني؟
شكرًا
المحلول
فقط أقتبس الخاص بك $result
متغير وسيتم الحفاظ على الأسطر الجديدة:
result=$(grep "$pattern" $file)
echo "$result"
السبب وراء نجاح ذلك هو أنه عندما تقوم بتضمين شيء ما بين علامات اقتباس مزدوجة في bash، يتم التعامل مع كل شيء داخل علامات الاقتباس هذه ككلمة واحدة.وهذا يعني أنه لن يخضع تقسيم الكلمة.أنظر أيضا: http://mywiki.wooledge.org/WordSplitting
بشكل فعال عند الاستخدام $result
, ، يتم توسيعه إلى هذا (نظرًا لأنه يتم التعامل مع الأسطر الجديدة كمحددات):
echo A) somewords B) somelines C) somenumbers
عندما تستخدم "$result"
وتجنب تقسيم الكلمة، يتم توسيعها إلى هذا:
echo "A) somewords
B) somelines
C) somenumbers"
مذكرة إضافية:استخدام $(...)
بدلاً من العلامات الخلفية تعمل على تحسين إمكانية القراءة كما أنها أكثر قابلية للنقل.